Linq和GROUPBY子句
我很好奇x在linq group by子句中的作用是什么:groupxby x可以替换为1:Linq和GROUPBY子句,linq,Linq,我很好奇x在linq group by子句中的作用是什么:groupxby 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
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中选择的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;
这是一个表达式,用于确定
group by
子句的输出内容
实际上,您并不是在检查整个输出,而是只检查键
,它们在上面的示例中是相同的,因为分组是由相同的东西(box.BoxId
)完成的
但是,请替换最后一行:
select q.Key;
与
你会注意到:
查询将返回一个group1by…
,该分组将所有值设置为1i分组
查询将返回一个groupbox by…
,该查询将包含所有的boxId键,以及与分组条件相关的对应的IGrouping
对象box
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();
}
您可以使用expression而不是
x
。x是分组依据聚合的内容。因此,用1替换它没有多大意义,因为每个组都需要一个充满1的IEnumerable
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();
}