Pet*_*jan 5 .net c# collections linq-to-objects
我有两个集合(通用列表),我们称之为ListA和ListB.
在ListA中,我有一些类型为A的项目.在ListB中,我有一些类型B的项目具有与ListA中的项目相同的标识(但不是同一类型),还有更多项目.我想删除ListB中与ListA中ID相同的所有项目.这样做的最佳方法是什么?Linq对象很合适吗?你会用什么算法?
例
ListA:ItemWithID1,ItemWithID2¨
ListB:ItemWithID1,ItemWithID2,ItemWithID3,ItemWithID4
编辑:我忘记在原始问题中提到ListA和ListB不包含相同的类型.因此,比较它们的唯一方法是通过.Id属性.这使我到目前为止得到的答案无效.
Tod*_*ite 12
这有两个选择.不确定哪一个更快.
listB.RemoveAll(listA.Contains);
foreach (string str in listA.Intersect(listB))
listB.Remove(str);
Run Code Online (Sandbox Code Playgroud)
我发现 lambda 表达式是完美的匹配。我可以使用 lambda 只需几行即可完成此操作,而不是使用长的 linq to object 方法:
foreach(TypeA objectA in listA){
listB.RemoveAll(objectB => objectB.Id == objectA.Id);
}
Run Code Online (Sandbox Code Playgroud)