Linq За исключением рассмотрения только одного свойства

У меня есть два списка объектов.

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

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

Я хочу сделать это:

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

Однако, читая другие вопросы, похожие на мои, я понимаю, что это не работает, если я не переопределяю Equals.

Я не хочу этого делать, но оба obj2 и obj1 имеют свойство строки, достаточное для того, чтобы убедиться, что они равны. Если obj2.StringProperty эквивалентно obj1.StringProperty, то эти два можно считать равными.

Есть ли способ, которым я могу использовать Except, но используя только свойство string для сравнения?

Ответ 1

Метод Except требует, чтобы оба задействованных типа коллекции имели один и тот же тип элемента. В этом случае типы элементов различаются (object1 и object2), поэтому Except на самом деле не вариант. Лучший способ использования здесь - Where

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