我有两个包含对象的列表。它们的长度相同。每个对象都有一个ID(在两个列表中都表示),一个更改日期和一些数据。我想创建一个具有相同ID的新列表,但是对象具有更新的更新日期,并且具有高效的Linq语句。
示例:
清单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 :(得分:1)
如果我们假设您有一个包含您提到的列表的列表:
var input = new List<Item> { list1, list2 };
其中Item
是list1
和list2
包含的对象的类型。
您可以尝试以下操作:
var output = input.SelectMany(x=>x)
.GroupBy(x=>x.ID)
.Select(gr=>gr.OrderByDescending(x=>x.ChangeDate).First());
基本上,我们将列表中的所有元素放在一个列表中,然后根据其ID对项目进行分组。然后从每组我们选择最近的记录。
如果我们只有列表,我们可以将它们连接起来:
var input = list1.AddRange(list2);
然后尝试以下操作:
var output = input.GroupBy(x=>x.ID)
.Select(gr=>gr.OrderByDescending(x=>x.ChangeDate).First());