用LINQ比较两个集合

时间:2014-10-15 13:12:55

标签: c# linq linq-to-sql collections comparison

我有两个来自Type的集合,比如说:

MyType
{
    public bool isDifferent = false;
    private string str;
    public int n;
}

ObservableCollection<MyType> c1;
ObservableCollection<MyType> c2;

我想比较c1和c2,如果它们不同,将c1的不同设置为True,并且c2的不同保持这样。如何用LINQ实现这一目标。我也想知道当isDifferent总是不一样时,比较会如何发生。也许有些人为了不同的memeber特别排除了linq条款。

2 个答案:

答案 0 :(得分:1)

LINQ提供Zip方法,允许您在一个循环中遍历两个集合:

foreach (var p in c1.Zip(c2, (a, b) => new {a, b}) {
    // p.a represents the first element; p.b is the second element
    if (!CompareMyType(p.a, p.b)) {
        // Set properties of p.a or p.b here:
        p.a.isDifferent = true;
    }
}

请注意,此代码允许您根据两个集合中的项目序列测试成对相等性,因此集合中的排序非常重要。

答案 1 :(得分:0)

Linq 尝试这样的事情。虽然您没有告诉业务涉及比较集合

c1.Except(c2).Union(c2.Except(c1)).Select(your properties);

使用Symmetric ExceptWith

var c1= new HashSet<T>(a);
var c2 = new HashSet<T>(b);
c1.SymmetricExceptWith(c2);