Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# linq查询表单_C#_Linq - Fatal编程技术网

C# linq查询表单

C# linq查询表单,c#,linq,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); List list1=新列表{1,2,3,4,5}; List list2=新列表{2,3,4,5,6,7}; foreach

如何将以下代码转换为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);
List list1=新列表{1,2,3,4,5};
List list2=新列表{2,3,4,5,6,7};
foreach(列表1中的int int1)
列表2.删除(int1);
您可以使用:

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

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


有关教育复习,请参阅Jon Skeets EduLinq系列,这里是。

您可以这样做:

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

+谢谢你的精彩解释。我每天都在网上学到新东西。
list1.ForEach( x => { list2.Remove(x); } );
list2.RemoveAll(m=>list1.Contains(m));