LINQ比较两个列表和删除我有两个列表。我想从LIST1中删除LIST2中不存在的任何项目。例如:varlist1=newList();list1.Add(newDownloadTask{OperationID=1,MachineID=1});list1.Add(newDownloadTask{OperationID=2,MachineID=1});list1.Add(newDownloadTask{OperationID=3,MachineID=1});list1.Add(newDownloadTask{OperationID=3,MachineID=2});varlist2=new列表();list2.Add(newDownloadTask{OperationID=1,MachineID=1});list2.Add(newDownloadTask{OperationID=3,MachineID=2});运行后list1应仅包含项目:组合operationId=1、machineId=1ANDOperationId=3、MachineId=2。DownloadTask是否正确覆盖Equals和GetHashCode?如果是这样,您只需要:list1=list1.Intersect(list2).ToList();当然,如果您乐于创建新列表。如果您真的想从现有列表中删除它们,则稍微困难一些。最简单的方法是弄清楚结果应该是什么样子,然后清除并重新添加:varnewList=list1.Intersect(list2).ToList();list1.清除();list1.AddRange(newList);当然,所有这些都要求您在DownloadTask中适当地实现平等——但如果您还没有这样做,那么这样做听起来是个好主意。(或者至少在某处实现IEqualityComparer-你可以将比较器传递给Intersect。)作为旁注,我看到“只将list1中的元素保留在list2中”(即交集)作为查看问题的简单方法,而不是“从中删除list1所有不在list2中的元素”——后者基本上是双重否定,这总是有点痛苦。我认为应该是:list1.RemoveAll(x=>list2.Exists(y=>y.OperationID==x.OperationID&&y.MachineID==x.MachineID));varlst=(fromlst1inlist1where!list2.Any(x=>x.OperationID==lst1.OperationID&&x.MachineID==lst1.MachineID)选择lst1).ToList();list1=lst.ToList();请尝试一下,它应该可以工作。以上是C#学习教程:LINQ比较两个列表,删除所有共享的内容。如果对大家有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
