【问题标题】:LINQ Group By Multiple fields -Syntax helpLINQ 按多个字段分组 - 语法帮助
【发布时间】: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() });

【问题讨论】:

    标签: c# linq group-by


    【解决方案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 之间切换
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-20
    • 1970-01-01
    • 2015-11-12
    • 2016-11-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多