从另一个集合中的一个集合中删除项目

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)


Pet*_*jan 3

我发现 lambda 表达式是完美的匹配。我可以使用 lambda 只需几行即可完成此操作,而不是使用长的 linq to object 方法:

foreach(TypeA objectA in listA){
    listB.RemoveAll(objectB => objectB.Id == objectA.Id);
}
Run Code Online (Sandbox Code Playgroud)