Q:

C# クエリのgroupbyを使い方を知りたい

色々調べたのですがクエリ式のgroupbyの使い方がいまいちわかりません[キーを指定して、値の等しい物をグループ化します]とはどのような意味なのでしょうか値を画面に出してみましたが理解できないので教えてくれますでしょうか？
              class Program
                  {
                   struct st
                  {
                       public int x;
                       public int w;

                      public st(int x,int w)
                     {
                        this.x = x;
                        this.w = w;
                    }
                }
                static void Main(string[] args)
                {
                    var x = new[]{
                        new {x = 0,w = 1 },
                        new {x = 0,w = 2 },
                        new {x = 1,w = 3 },
                        new {x = 1,w = 4 },
                    };

                    st[] xx = new[]{
                        new st(0,1),
                        new st(0,2),
                        new st(1,3),
                        new st(1,4),
                    };

                    var t = from a in xx
                            group a.x by a.w;

                    // Console.WriteLine(t.Key);

                    foreach (var a in t)
                    {
                        Console.WriteLine("key: "+a.Key);
                        foreach(var e in a)
                        {
                            Console.WriteLine(e);

                        }
                        Console.WriteLine();

                    }

                    Console.ReadKey();
                }
            }

A:

LINQの操作はSQLのDMLと概念的に同じなので、SQLのGROUP BYと同じ使い方ができます。
例えば
「ある伝票テーブルに、
既にバッチ連携登録済の内容と新規にバッチ連携されて登録したい内容があるとして、
基準となる伝票日付を決める必要があるが、
その基準は同一伝票No内の仕訳日が最も若いものが持っている伝票日付とする
（仕訳日が最も若いものが複数ある場合は、どれでも仕様上問題ない）
（他にもいくつか仕様はあるけど割愛）」
という処理を何らかの理由でSQLではなくLINQ上で処理したいのであれば…
var fixedDenpyoDate =
  from entt in allShucchoEntities
  where entt.DenpyoNo = newEntity.DenpyoNo && entt.DenpyoMeisaiNo != null
  group entt by entt.DenpyoNo into grouped
  select
    new {.DenpyoDate = grouped.Min((x) => x.ShiwakeDate)}.First().DenpyoDate;

