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.*** 

3 Solutions collect form web for “LINQ – 查找一个列表中不在另一个列表中的所有项目”

尝试使用.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)); 
  • 为什么C#编译器在这个嵌套的LINQ查询上生气?
  • NHibernate与LINQ to SQL
  • ASP.NET MVC如何将ModelState错误转换为json
  • 使用entity framework进行unit testing
  • 在c#/ LINQ中将数组转换为string的最短方法
  • 如何获得Linq to Entity的最大ID?
  • 应该避免LINQ,因为它很慢?
  • LINQ方法的运行时复杂性(Big-O)有什么保证?