Подтвердить что ты не робот

LINQ Lambda - Найти все ID в одном списке, которых нет в другом списке

У меня есть две коллекции объектов (List list1 и List list2). На каждом названии "ID" есть свойство. Я знаю, что в list2 всегда будет больше элементов, чем list1, мне просто нужен простой способ получить коллекцию всех элементов, которые существуют в списке2, но не list1, используя выражения lambda LINQ.

4b9b3361

Ответ 1

Если вам нужны только идентификаторы предметов, то Отметить ответ будет хорошо делать трюк. Если вам нужно вернуть сами элементы (и у них еще нет подходящей реализации Equals), вы можете попробовать что-то вроде этого:

// assumes that the ID property is an int - change the generic type if it not
var ids = new HashSet<int>(list1.Select(x => x.ID));
var results = list2.Where(x => !ids.Contains(x.ID));

Ответ 2

Это даст вам идентификаторы, которые находятся только в списке2:

var ids = list2.Select(x => x.Id).Except(list1.Select(x => x.Id));

Если ваши объекты сравниваются равными, когда они имеют одинаковый идентификатор, вы можете упростить его:

var objects = list2.Except(list1);