LINQ Lambda - Найти все идентификаторы в одном списке, которые не существуют в другом списке - PullRequest
17 голосов
/ 01 октября 2010

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

Ответы [ 2 ]

35 голосов
/ 01 октября 2010

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

// assumes that the ID property is an int - change the generic type if it's not
var ids = new HashSet<int>(list1.Select(x => x.ID));
var results = list2.Where(x => !ids.Contains(x.ID));
22 голосов
/ 01 октября 2010

Это даст вам идентификаторы, которые есть только в list2:

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

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

var objects = list2.Except(list1);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...