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));