【问题标题】:Select and grouping based on different fields/integer根据不同的字段/整数进行选择和分组
【发布时间】:2020-02-10 04:48:46
【问题描述】:

SQL 中的表:

 Document            Revision             Version
 -----------------------------------------------------
   ABC                  1                    1
   ABC                  1                    2
   ABC                  1                    8
   ABC                  2                    3
   DocumentF            1                    3
   DocumentF            1                    2

预期输出:

 Document            Revision             Version
 -----------------------------------------------------
   ABC                     1                    8
   ABC                     2                    3
   DocumentF               1                    3

基本上如果同一个版本有两个版本,根据版本带回最新的。

我尝试了以下方法:

var list = from document in documents
           group document by document.Document
           into groups
           from g in groups
           group g by g.Revision
           into final
           select final.OrderByDescending(d => d.Version).FirstOrDefault();

上面的代码产生以下内容:

 Document            Revision             Version
 -----------------------------------------------------
   ABC                     2                    3
   DocumentF               1                    3

【问题讨论】:

    标签: c# .net linq lambda


    【解决方案1】:

    使用 Linq,我们可以按如下所示的多个属性进行分组

     var list = from document in documents
                           group document by (document.Document, document.Revision)
                          into groups
                           select groups.OrderByDescending(d => d.Version).FirstOrDefault();
    

    【讨论】:

      【解决方案2】:

      你需要GroupBymultiple columns,像这样:

       var result = documents.GroupBy(c => new { c.Document, c.Revision })
              .Select(c => new DocumentClass
              {
                  Document = c.Key.Document,
                  Revision = c.Key.Revision,
                  Version = c.Max(d=>d.Version)
              }).ToList();
      

      【讨论】:

      • 效果很好 - 有没有办法返回整个对象而不是匿名类型?例子。我的清单是 List 文件。 Document 类包含:Reference(即 ABC、DocumentF)、Revision、Version 和一大堆字段。
      • @LuxC 查看我更新的答案,您只需将您的班级名称添加到 Select 部分。
      • 对不起,我的意思是,有没有办法返回原始对象而不是新类?
      • @LuxC 你可以,也可以用类似的方式,但不推荐,你应该总是返回一个 DTO 类,更多细节见这篇文章stackoverflow.com/questions/21554977/…
      猜你喜欢
      • 1970-01-01
      • 2015-01-13
      • 2017-10-29
      • 2013-07-04
      • 1970-01-01
      • 2011-09-02
      • 1970-01-01
      • 2019-08-02
      • 1970-01-01
      相关资源
      最近更新 更多