Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Linq根据内容从两个列表中选择对象_C#_Linq - Fatal编程技术网

C# Linq根据内容从两个列表中选择对象

C# Linq根据内容从两个列表中选择对象,c#,linq,C#,Linq,我有两个对象列表。它们的长度相同。每个对象都有一个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 干杯如果我们假设您有一个包含您提到的列表的列表: var input = new List&l

我有两个对象列表。它们的长度相同。每个对象都有一个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

干杯

如果我们假设您有一个包含您提到的列表的列表:

var input = new List<Item> { list1, list2 };
本质上,我们将列表中的所有元素投影到一个列表中,然后根据它们的ID对项目进行分组。然后从每个组中选择最新的记录

如果我们只有列表,我们可以将它们连接起来:

var input = list1.AddRange(list2);
然后尝试以下操作:

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

两个列表的顺序是一样的吗?顺序并不总是一样的。非常好而且优雅。非常感谢。您不必将这两种输入都放在额外的输入列表中,只需将
input.SelectMany(x=>x)
替换为
list1.Union(list2)
@Jeremi就更好了。非常感谢。
var input = list1.AddRange(list2);
var output = input.GroupBy(x=>x.ID)
                  .Select(gr=>gr.OrderByDescending(x=>x.ChangeDate).First());