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 の 2 つのレコードのうち、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 に答える