linq查询表

Ele*_*ena 2 c# linq

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

List<int> list1 = new List<int> {1,2,3,4,5};
List<int> list2= new List<int> {2,3,4,5,6,7};
foreach (int int1 in list1)
 list2.Remove(int1);
Run Code Online (Sandbox Code Playgroud)

Bro*_*ass 9

你可以使用Except():

list2 = list2.Except(list1)
             .ToList();
Run Code Online (Sandbox Code Playgroud)

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

Except()HashSet<int>list1内部创建一个,然后只是遍历该list2集合.只有HashSet结果枚举中没有包含的项目- 因为HashSet查找平均为O(1),这将导致总共进行O(n)工作.

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