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 按多个字段分组 - 语法帮助的主要内容,如果未能解决你的问题,请参考以下文章