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();