Linq除了只考虑一个属性

时间:2014-02-20 21:59:30

标签: c# linq

我有两个对象列表。

List<object1> obj1 = new List<object1>();

List<object2> obj2 = new List<object2>(); 

我想这样做:

obj2 = obj2.Except(obj1).ToList();

但是,通过阅读与我类似的其他问题,我知道除非我重写等于,否则这不起作用。

我不想这样做,但是obj2和obj1都有一个字符串属性,足以看出它们是否相等。如果obj2.StringProperty等同于obj1.StringProperty,则可以认为这两者相等。

我有什么方法可以使用Except,但只使用string属性进行比较?

1 个答案:

答案 0 :(得分:33)

Except方法要求所涉及的两种集合类型具有相同的元素类型。在这种情况下,元素类型不同(object1object2)因此Except实际上不是一个选项。这里使用的更好方法是Where

obj2 = obj2
  .Where(x => !obj1.Any(y => y.StringProperty == x.StringProperty))
  .ToList();