[英]Linq query to order a list based on date and get distinct
我有一個列表,如下所示:
List<MyObjects> list:
list[0] - Id: 1; RefId:101; Date:22/06/2016
list[1] - Id: 2; RefId:102; Date:24/06/2016
list[2] - Id: 3; RefId:101; Date:26/06/2016
list[3] - Id: 4; RefId:103; Date:28/06/2016
我需要一個linq查詢,它基於具有最新日期的RefId來使我與眾不同,如下所示:
List<MyObjects> newList:
list[0] - Id: 3; RefId:101; Date:26/06/2016
list[1] - Id: 2; RefId:102; Date:24/06/2016
list[2] - Id: 4; RefId:103; Date:28/06/2016
在此重復RefId-101,但其第一個日期值較舊,因此將其刪除。 提前致謝。
使用Linq按RefId
分組,然后按Date
對每個分組排序,然后從每個分組中取出第一個:
list.GroupBy(x => x.RefId).Select(x => x.OrderByDescending(y => y.Date).FirstOrDefault());
或使用查詢語法:
List<MyObjects> results = (from x in list
group x by x.RefId into grp
select grp.OrderByDescending(y => y.Date).FirstOrDefault()
).ToList();
您可以使用GroupBy
對RefId
進行分組,然后按Date
對這些分組進行排序,並采用第一個分組:
var result = list.GroupBy(o => o.RefId)
.Select(g => g.OrderByDescending(gx => gx.Date).First())
.ToList();
由於您需要最新的 Date
,因此需要OrderByDescending
。
我認為最好避免調用.FirstOrDefault()
。 這是一個替代方案:
var newList =
list
.GroupBy(x => x.RefId)
.SelectMany(x => x.OrderByDescending(y => y.Date).Take(1))
.ToList();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.