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

use*_*620 0 c# linq list

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

class foo
public string name
public string property1
public string property2
Run Code Online (Sandbox Code Playgroud)

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

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

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

new foo() = 
{
   name = "name",
   property1 = "random value",
   property1 = "random value"
}
Run Code Online (Sandbox Code Playgroud)

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

new foo() = 
{
   name = "name",
   property1 = "random value",
   property1 = "random value"
}
Run Code Online (Sandbox Code Playgroud)

是否可以使用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个与原来的列表相比发生了变化。

sow*_*wen 5

尝试使用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();
Run Code Online (Sandbox Code Playgroud)

在集合论中,(A-B)+(B-A)相当于它们两者之间的差异。