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

Posted

技术标签:

【中文标题】LINQ 按多个字段分组 - 语法帮助【英文标题】:LINQ Group By Multiple fields -Syntax help 【发布时间】:2009-12-08 18:40:03 【问题描述】:

示例 2 需要什么更正才能按多列分组

示例 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 => p.Customer, q => q.OrderDate, (k1, k2, group) =>
   new  Key1 = k1, Key2 = k2, Count = group.Count() );

【问题讨论】:

【参考方案1】:

在点表示法中使用与查询表达式中相同的匿名类型:

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 参数下,但随后它会包含在 SO 中。)

【讨论】:

乔恩,我在使用扩展方法时总是犯错误,有什么简单的方法可以熟悉吗? @Udana:我发现查看 C# 编译器对查询表达式的作用非常有帮助 - 但我是一个基于规范的人。查看可用的重载并阅读文档也有很大帮助:) @Jon Skeet:GroupBy() 的这种重载在 MSDN 中没有太多描述。你能写一行吗? @FMFF: (msmvps.com/blogs/jon_skeet/archive/2011/01/01/…) 据我所知,这种重载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 之间切换

以上是关于LINQ 按多个字段分组 - 语法帮助的主要内容,如果未能解决你的问题,请参考以下文章

Linq 语法

linq语法大全(转集)

LINQ - 按多个键分组未给出预期结果

Linq,EF Core - 按一个字段分组并使用其他字段从其他表中获取数据列表

分组查询操作(MySQL)

分组查询操作(MySQL)