色々調べたのですがクエリ式の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();
                }
            }