2

我很好奇aa linq group by 子句中的x是什么意思: group x by ...

x 可以用 1 代替:

       var query = from box in c.Boxes
                    join item in c.Items on box equals item.Box
                    group 1 by new { BoxId = box.BoxId, item.ItemType.ItemTypeId } into g
                    select new {  g.Key.BoxId, g.Key.ItemTypeId, Count = g.Count() };

有没有人有一个样本,其中 x (或您在 group by 中选择的任何局部变量)确实具有一定的价值?

我是说

var query2 =  from box in c.Boxes
                              group box by box.BoxId into q
                              select q.Key;

可以替换为

var query2 =  from box in c.Boxes
                              group 1 by box.BoxId into q
                              select q.Key;
4

2 回答 2

2

这是决定group by子句输出中内容的表达式。

您实际上并没有检查整个输出,而只是检查了Keys上面示例中相同的 ,因为分组是由相同的东西 ( box.BoxId) 完成的。

但是,替换最后一行:

select q.Key;

select q;

你会注意到:

  • 查询将group 1 by ...返回一个IGrouping<int, int>将所有值设置为 1
  • 查询将group box by ...返回一个IGrouping<int, Box>,它将具有所有 boxId 键,并且对于它们中的每一个,对应Box于分组标准的对象。
于 2013-08-10T10:08:11.580 回答
1

在 x 组中... x 是聚合的内容。

所以你可以写类似

var childrenByAge = from child in class
                    group getName(child) by child.Age;

这为您提供了一个包含每个年龄的孩子姓名的分组。

这是一个简单的示例,您可以在其中轻松测试差异:

    static void Main(string[] args)
    {
        var grouping = from c in "Hello World!"
                       group c by  c;  // Replace 'group c by' with 'group 1 by'
                                       // and compare results


        foreach (var group in grouping)
        {
            Console.Write("KEY:  {0} VALUES :", group.Key);
            foreach (var value in group)
                Console.Write(" {0}", value);

            Console.WriteLine();
        }

        Console.ReadKey();

    }
于 2013-08-10T10:14:51.410 回答