为每个ID选择具有最大日期的值 [英] Select values with max date for each ID
本文介绍了为每个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
如何使用linq为每个ID选择最大值
How with linq select max values for each id
context.History
.GroupBy(x => x.id) ??
.SelectOnlyWithMax(z => z.date) ??
结果只有两个对象
id value date
1 3 03/01/2017 20:20:20
2 6 02/01/2017 20:20:20
推荐答案
如果希望每个Id
的整个行都具有最高的日期,则可以使用以下代码(用LinqPad编写).如果只需要Id
,则可以使用@BurnsBA的答案,因为这样会更有效.
If you want the entire row with the highest date for each Id
, you can use the following code (written with LinqPad). If you just want the Id
, you can use @BurnsBA's answer, as it will be slightly more efficient.
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; }
}
结果:
首先将其按Id
分组,然后按Date
降序对组中的项目进行排序,然后返回第一个,SelectMany
然后对列表进行展平.
First it groups by Id
, then sorts the items within the group by Date
in descending order, and returns the first one, SelectMany
then flattens the list.
这篇关于为每个ID选择具有最大日期的值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文