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

LINQ - найти все элементы в одном списке, которые не находятся в другом списке

Я застрял с запросом LINQ (или любым другим эффективным средством достижения одного и того же). Может ли кто-нибудь показать мне, как я могу выбрать все элементы в одном списке, которых нет в другом списке?

В принципе, у меня есть список, который я создал, сопоставляя элементы между двумя другими списками. Мне нужно найти все элементы в первом списке, которые не были найдены. Может кто-нибудь заполнить звезды во втором запросе LINQ ниже с запросом, который достигнет этой цели? Если бы я использовал TSQL, я бы сделал SELECT * NOT IN (), но я не думаю, что LINQ позволяет это.

//Create some sample lists.
List<IdentifierLookupData> list1 = new List<IdentifierLookupData> { /*Init */ };
List<IdentifierLookupData> list2 = new List<IdentifierLookupData> { /*Init */ };

//Find all items in list1 and list2 that match and store them in joinItems.
var joinItems = (from d1 in list1
    join d2 in list2 on d1 equals d2
    select d1).ToList<IdentiferLookupData>();

//Find all items in list1 not in joinItems.
var deletedItems = (from d1 in list1
     ***select all items not found in joinItems list.***
4b9b3361

Ответ 1

Попробуйте использовать метод расширения .Except (docs):

var result = list1.Except(list2);

предоставит вам все элементы в list1, которые не находятся в list2.

Ответ 2

Самый простой способ - использовать метод Except.

var deletedItems = list1.Except(joinItems);

Это вернет набор элементов в list1, который не содержится в joinItems

Ответ 3

Попробуйте следующее:

var List2 = OriginalList.Where(item => !List1.Any(item2 => item2.ID == item.ID));