2017-09-07 15 views
1

オブジェクトを持つ2つのリストがあります。彼らは同じ長さです。各オブジェクトはID(両方のリストに表示されます)、変更日および一部のデータを持っています。私は同じIDの新しいリストを作成したいが、効率の良いLinqステートメントを使って、より最近の変更日のオブジェクトを作成したい。Linqがコンテンツに基づいて2つのリストからオブジェクトを選択する

例:

リスト1:

ID: 1 ChangeDate 12:00 Data 1:1 
ID: 2 ChangeDate 13:00 Data 1:2 <- 
ID: 3 ChangeDate 14:00 Data 1:3 

リスト2:

ID: 1 ChangeDate 12:05 Data 2:1 <- 
ID: 2 ChangeDate 12:55 Data 2:2 
ID: 3 ChangeDate 14:10 Data 2:3 <- 

結果:

ID: 1 ChangeDate 12:05 Data 2:1 
ID: 2 ChangeDate 13:00 Data 1:2 
ID: 3 ChangeDate 14:10 Data 2:3 

乾杯

+0

同じ両方のリストのためですか? –

+0

注文は必ずしも同じではありません。 – Bagaboo

答えて

1

我々はあなたが言及したリストを含むリストを持っていると仮定した場合:

var input = new List<Item> { list1, list2 }; 

どこItemそれlist1list2には、オブジェクトのタイプ。

あなたが次のことを試すことができます。

var output = input.SelectMany(x=>x) 
        .GroupBy(x=>x.ID) 
        .Select(gr=>gr.OrderByDescending(x=>x.ChangeDate).First()); 

基本的に我々は彼らのIDに基づいて項目すべてつのリスト内のリストからelemntsし、我々のグループを投影します。各グループから、最新のレコードを選択します。

var input = list1.AddRange(list2); 

をして、次のことを試してください:我々は唯一のリストを持っている場合は

、我々はそれらを連結することができ

var output = input.GroupBy(x=>x.ID) 
        .Select(gr=>gr.OrderByDescending(x=>x.ChangeDate).First()); 
+0

優秀かつ優雅。ありがとうございました! – Bagaboo

+0

@Bagabooよろしくお願いします! – Christos

+0

両方を余分な入力リストに入れる代わりに、 'input.SelectMany(x => x)'を 'list1.Union(list2)'に置き換えることができます。 – Jeremi

関連する問題