如何为每个键获取LINQ一行

use*_*506 9 c# linq max entity-framework-6

我有以下列表:

EMP_ID | UPDATED_DATE | MARK
------ | ------------ | ----
111    | 01/01/2015   | 99  
111    | 01/01/2013   | 85  
111    | 01/01/2017   | 80  
222    | 01/01/2011   | 70  
222    | 01/01/2015   | 55  
222    | 01/01/2002   | 60  

我必须为每个ID选择一行,最新的UPDATED_DATE,在我们的等:

EMP_ID | UPDATED_DATE | MARK
------ | ------------ | ----
111    | 01/01/2017   | 80  
222    | 01/01/2015   | 55  

这是订单的代码:

empMarksList.OrderBy(x=>x.EMP_ID).ThenBy(y=>y.UPDATED_DATE)
Run Code Online (Sandbox Code Playgroud)

Ami*_*ich 11

用途GroupBy:

var items = empMarksList
                   .GroupBy(e => e.EMP_ID)
                   .Select(grp => grp.OrderByDescending(v => v.UPDATED_DATE).First());
Run Code Online (Sandbox Code Playgroud)

或者如果你想要一个词典:

var dict = empMarksList
              .GroupBy(e => e.EMP_ID)
              .ToDictionary(grp => grp.Key,
                            grp => grp.OrderByDescending(v => v.UPDATED_DATE).First());
Run Code Online (Sandbox Code Playgroud)

  • @arekzyla - 在这段代码中`.first()`非常好,因为`.GroupBy`总能保证至少有一个结果. (7认同)