我有两个来自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条款。
答案 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);