将两个列表与LINQ进行比较,并检索不同的项

时间:2016-01-27 17:19:54

标签: c# linq list

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

class foo
public string name
public string property1
public string property2

现在让我们实例化两个fooList<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>考虑到项目订单和任何不匹配的属性值也被视为差异。

这对原始对象很有用: Compare two lists, item by item, using linq但没有提供返回带有差异的新列表的方法。

修改

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

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

1 个答案:

答案 0 :(得分:2)

尝试使用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)相当于两者之间的差异。