1

我有一个List<dynamic>具有相同 ID 但不同 ValidTo/ValidFrom 值的 N 条记录。

假设我有这些对象:

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 的新集合,但那些具有最大的 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,依此类推。

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

谢谢您的帮助。

4

1 回答 1

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

这个答案来自记忆,我没有方便的编译器来检查它。

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

于 2013-05-25T07:25:26.920 回答