首页 > 解决方案 > 根据不同的字段/整数进行选择和分组

问题描述

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#.netlinqlambda

解决方案


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

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

推荐阅读