我有一个List<dynamic>
,其中我有N条记录具有相同的ID但不同的ValidTo / ValidFrom值。
说我有这些物品:
Id: 1, ValidFrom: 1/1/2012, ValidTo: 1/1/2015
Id: 1, ValidFrom: 1/1/2013, ValidTo: 1/1/2015.
Id: 2, ValidFrom: 6/1/2012, ValidTo: 1/1/2015
Id: 2, ValidFrom: 6/1/2013, ValidTo: 1/1/2015
Id: 3, ValidFrom: 12/1/2012, ValidTo: 1/1/2015
Id: 3, ValidFrom: 12/1/2013, ValidTo: 1/1/2015
鉴于此,我想要从当前集合中删除旧记录(对于每个ID,具有最低ValidFrom日期的ID),或者,只是获取具有每个ID的新集合,但是具有最大ValidFrom日期的那些。
因此,预期的输出将是:
Id: 1, ValidFrom: 1/1/2013, ValidTo: 1/1/2015.
Id: 2, ValidFrom: 6/1/2012, ValidTo: 1/1/2015
Id: 3, ValidFrom: 12/1/2013, ValidTo: 1/1/2015
也就是说,ID为1的两个记录中,ValidFrom最低的记录被丢弃,ID2和ID3等等。
我认为这是通过分组完成的,我只是不确定如何。
感谢您的帮助。
答案 0 :(得分:2)
list.GroupBy(x => x.Id)
.Select(group =>
group.OrderByDescending(record => record.ValidFrom).First())
这个答案来自内存,我没有编译器方便检查它。
我假设日期实际上是DateTime
个对象。如果它们只是字符串,则需要更改逻辑以解决此问题。