linq查询表单

本文关键字:表单 查询表 查询 linq | 更新日期: 2023-09-27 18:23:53

以下代码如何转换为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);

linq查询表单

您可以使用Except():

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

这也将比您的原始代码执行得更好,因为您的代码是O(n2)在第一个集合中的所有项上执行循环,然后尝试在第二个集合中找到第一个匹配项。(尽管无可否认,如果您的收藏这么小,性能差异不会有多大影响,但对于大型收藏来说,这将非常重要)。

Except()将在内部创建list1HashSet<int>,然后只遍历list2集合。只有不包含在HashSet中的项最终会出现在结果枚举中——由于HashSet查找的平均值为O(1),这将导致总共O(n)项的工作量。

关于教育复习,请参阅Jon Skeets EduLinq系列,这里是Except的章节。

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

您可以这样做:

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