这是表“历史”
id value date
1 1 01/01/2017 20:20:20
1 2 02/01/2017 20:20:20
1 3 03/01/2017 20:20:20
2 5 01/01/2017 20:20:20
2 6 02/01/2017 20:20:20
Run Code Online (Sandbox Code Playgroud)
如何使用linq为每个ID选择最大值
id value date
1 1 01/01/2017 20:20:20
1 2 02/01/2017 20:20:20
1 3 03/01/2017 20:20:20
2 5 01/01/2017 20:20:20
2 6 02/01/2017 20:20:20
Run Code Online (Sandbox Code Playgroud)
结果只有两个对象
id value date
1 3 03/01/2017 20:20:20
2 6 02/01/2017 20:20:20
Run Code Online (Sandbox Code Playgroud)
如果希望整个行的日期都最高Id
,则可以使用以下代码(用LinqPad编写)。如果只需要使用Id
,则可以使用@BurnsBA的答案,因为这样做会稍微更有效。
void Main()
{
var data = new List<Record>
{
new Record(){Id=1, Value=1, Date=new DateTime(2017,1,1)},
new Record(){Id=1, Value=2, Date=new DateTime(2017,2,1)},
new Record(){Id=1, Value=3, Date=new DateTime(2017,3,1)},
new Record(){Id=2, Value=5, Date=new DateTime(2017,1,1)},
new Record(){Id=2, Value=6, Date=new DateTime(2017,2,1)},
};
var query = data.GroupBy(d => d.Id)
.SelectMany(g => g.OrderByDescending(d => d.Date)
.Take(1));
query.Dump();
}
public class Record
{
public int Id { get; set; }
public int Value { get; set; }
public DateTime Date { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
结果:
首先按进行分组Id
,然后按Date
降序对分组中的项目进行排序,然后返回第一个,SelectMany
然后对列表进行展平。
归档时间: |
|
查看次数: |
1936 次 |
最近记录: |