Использование Enumerable.Except
и, в частности, перегрузка , которая принимает IEqualityComparer<MyType>
:
var complement = c2.Except(c1, new MyTypeEqualityComparer());
Обратите внимание, что это приводит к разнице в наборах и, следовательно, дубликаты в c2
будут появляться в результирующем IEnumerable<MyType>
только один раз. Здесь нужно реализовать IEqualityComparer<MyType>
как что-то вроде
class MyTypeEqualityComparer : IEqualityComparer<MyType> {
public bool Equals(MyType x, MyType y) {
return x.Id.Equals(y.Id);
}
public int GetHashCode(MyType obj) {
return obj.Id.GetHashCode();
}
}