Ответ 1
Попробуйте использовать метод расширения .Except
(docs):
var result = list1.Except(list2);
предоставит вам все элементы в list1
, которые не находятся в list2
.
Я застрял с запросом 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.***
Попробуйте использовать метод расширения .Except
(docs):
var result = list1.Except(list2);
предоставит вам все элементы в list1
, которые не находятся в list2
.
Самый простой способ - использовать метод Except
.
var deletedItems = list1.Except(joinItems);
Это вернет набор элементов в list1
, который не содержится в joinItems
Попробуйте следующее:
var List2 = OriginalList.Where(item => !List1.Any(item2 => item2.ID == item.ID));