LINQ – 查找一个列表中不在另一个列表中的所有项目
我坚持使用LINQ查询(或任何其他有效的方法来完成相同的事情)。 有人可以告诉我如何select一个列表中不存在于另一个列表中的所有项目吗?
基本上,我有一个我通过两个其他列表之间的项目匹配而形成的列表。 我需要find匹配找不到的第一个列表中的所有项目。 有人可以在下面的第二个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));