Linq除了只考虑一个属性

我有两个对象列表。

List obj1 = new List(); List obj2 = new List(); 

我想做这个:

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

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

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

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

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

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