使用 LINQ 比较两个列表,并检索不同的项

本文关键字:检索 列表 两个 比较 LINQ 使用 | 更新日期: 2023-09-27 18:32:06

假设我有以下对象foo及其属性如下:

class foo
public string name
public string property1
public string property2

现在让我们实例化两个foo列表: List<foo>()

第一个列表包含两个foo对象:

new foo() = 
{
   name = "name",
   property1 = "random value",
   property1 = "random value"
}
new foo() = 
{
   name = "name",
   property1 = "random value",
   property1 = "random value"
}

第二个列表包含一个foo对象:

new foo() = 
{
   name = "name",
   property1 = "random value",
   property1 = "random value"
}

是否可以使用 LINQ 比较并返回包含这两个列表(或任何其他列表)之间差异的新List<foo>考虑到项目顺序和任何不匹配的属性值也被视为差异。

这对基元对象很有帮助:使用 linq 逐项比较两个列表,但不提供返回具有差异的新列表的方法。

编辑

@CSharpie重新开放...同样,现在的问题看起来定义得很差 - 即 {1,2,3,4} 和 {1,3,4} 的预期结果是什么?可能OP正在寻找某种差异。

@AlexeiLevenkov 输出应为 2。或者对于 {1,2,3,4} 和 {1,3,2, 4} 的列表,输出应为 {3,2},因为 3 和 2 的顺序(或值)已与原始列表更改。

使用 LINQ 比较两个列表,并检索不同的项

尝试使用 Except LINQ 方法:

List<int> a = new List<int>{ 1, 2, 5 };
List<int> b = new List<int>{ 2, 3};
var result = a.Except(b).Union(b.Except(a)).ToList();

在集合论中,(A-B)+(B-A)等价于两者之间的差异。