Linq查询以基于日期排序列表并获得不同

Mic*_*ips -1 c# linq

我有一个列表,如下所示:

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,但其第一个日期值较旧,因此将其删除。提前致谢。

Zei*_*kki 5

使用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)