LINQ按多个字段分组-语法帮助

12 浏览
0 Comments

LINQ按多个字段分组-语法帮助

示例1:

var query = from cm in cust
             group cm by new { cm.Customer, cm.OrderDate } into cms
             select new 
             { 
                 Key1 = cms.Key.Customer,
                 Key2 = cms.Key.OrderDate,
                 Count = cms.Count() 
             };

示例2(错误):

var qry = 
cust.GroupBy(p => new { p.Customer, p.OrderDate }, (k, group) =>
new { Key1 = k.Customer, Key2 = k.OrderDate, Count = group.Count() });

0
0 Comments

问题出现的原因:用户想要在LINQ查询中使用多个字段进行分组,但是不知道正确的语法。

解决方法:在点符号表示法中使用与查询表达式中相同的匿名类型。

LINQ查询代码示例:

var qry = cust.GroupBy(cm => new { cm.Customer, cm.OrderDate }, 
             (key, group) => new { Key1 = key.Customer, Key2 = key.OrderDate, 
                                   Count = group.Count() });

在实际的IDE中,我会将`(key, group)`与`cm`参数对齐,但在这里会被换行。

对于使用扩展方法总是犯错的问题,Jon建议查看C#编译器对查询表达式的转换,阅读文档并查看可用的重载方法也会有帮助。

Skeet表示MSDN对于这个重载方法的描述并不多。他认为这个重载方法`groupBy(x=>x.y, (key,group)=>[lambda with group and key])`只是一种更简洁的表达方式,等价于`GroupBy(x=>x.y).select(group=>[lambda with group and group.key])`,而且第二种方式更易读。

另外,用户还提到使用LINQPad也可以学到一些东西,因为在使用LINQ“from foo in bar select foo”语法后,可以在lambda和SQL之间切换。

0