linq查询表

如何将以下代码转换为linq或谓词表达式:

List list1 = new List {1,2,3,4,5}; List list2= new List {2,3,4,5,6,7}; foreach (int int1 in list1) list2.Remove(int1); 

你可以这样做:

 list1.ForEach( x => { list2.Remove(x); } ); 

您可以使用Except()

 list2 = list2.Except(list1) .ToList(); 

这也将比原始代码表现更好,因为你的代码是O(n 2 )在第一个集合中的所有项目上循环,然后尝试在第二个集合中找到第一个匹配。 (虽然可以肯定的是,如果您的系列很小,性能差异并不重要,但对于大型系列来说,它会有很大的影响)。

Except()将在内部创建list1HashSet ,然后只遍历list2集合。 只有未包含在HashSet中的项才会在结果枚举中结束 – 因为HashSet查找平均为O(1),这将导致总共进行O(n)工作。

有关教育的进修,请参阅Jon Skeets EduLinq系列,这里是Except的章节 。

 list2.RemoveAll(m=>list1.Contains(m));