如何使用LINQ to对象删除具有相同ID但具有不同日期值的两个对象

时间:2013-05-25 07:11:07

标签: c# linq linq-to-objects

我有一个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等等。

我认为这是通过分组完成的,我只是不确定如何。

感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

list.GroupBy(x => x.Id)
    .Select(group => 
            group.OrderByDescending(record => record.ValidFrom).First())

这个答案来自内存,我没有编译器方便检查它。

我假设日期实际上是DateTime个对象。如果它们只是字符串,则需要更改逻辑以解决此问题。