我有一个列表,如下所示:
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
Run Code Online (Sandbox Code Playgroud)
我需要一个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
Run Code Online (Sandbox Code Playgroud)
在此重复RefId-101,但其第一个日期值较旧,因此将其删除。提前致谢。
使用Linq Group by RefId然后排序每个组,Date然后从每个组中首先取出:
list.GroupBy(x => x.RefId).Select(x => x.OrderByDescending(y => y.Date).FirstOrDefault());
Run Code Online (Sandbox Code Playgroud)
或使用查询语法:
List<MyObjects> results = (from x in list
group x by x.RefId into grp
select grp.OrderByDescending(y => y.Date).FirstOrDefault()
).ToList();
Run Code Online (Sandbox Code Playgroud)