我很好奇 x 在linq group by子句中的含义: 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(或你在组中选择的wathever局部变量)确实有一些价值?
我的意思是
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;
答案 0 :(得分: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
个对象。答案 1 :(得分:1)
在x组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();
}