C# 如何实现列表。针对两个不同的对象列表删除?

C# 如何实现列表。针对两个不同的对象列表删除?,c#,list,C#,List,我有两个列表:ListA和ListB 对象的结构: 对象A:-commonID,AName 对象B:-commonID,BName 现在我的目标非常简单,我正在尝试删除ListA中与ListB中具有相同commonID的所有项目。以下是我尝试过的: foreach(var item in ListB) ListA.Remove(x=>x.commonID == item.commonID) 它引发异常: Cannot convert lambda expression to ty

我有两个列表:
ListA
ListB

对象的结构:
对象A:-commonID,AName
对象B:-commonID,BName

现在我的目标非常简单,我正在尝试删除
ListA
中与
ListB
中具有相同
commonID
的所有项目。以下是我尝试过的:

foreach(var item in ListB)
    ListA.Remove(x=>x.commonID == item.commonID)
它引发异常:

Cannot convert lambda expression to type 'A' because it is not a delegate type
我可以知道我做错了哪一部分吗?

您当前使用的是(需要删除单个项)而不是(需要谓词)

但是,更好的方法可能是创建一组要删除的所有ID,然后使用单个调用
RemoveAll

HashSet<string> idsToRemove = new HashSet<string>(ListB.Select(x => x.commonID));
ListA.RemoveAll(x => idsToRemove.Contains(x.commonID));
您当前使用的是(需要删除单个项)而不是(需要谓词)

但是,更好的方法可能是创建一组要删除的所有ID,然后使用单个调用
RemoveAll

HashSet<string> idsToRemove = new HashSet<string>(ListB.Select(x => x.commonID));
ListA.RemoveAll(x => idsToRemove.Contains(x.commonID));

Remove方法不接受谓词,而是接受实际项。因此,错误消息意味着lambda表达式无法转换为A类型的预期项

采用谓词:

ListA.RemoveAll(item => ListB.Any(x => x.CommonId == item.CommonID));

现在您甚至不需要外部循环。

Remove方法不接受谓词,而是实际的项。因此,错误消息意味着lambda表达式无法转换为A类型的预期项

采用谓词:

ListA.RemoveAll(item => ListB.Any(x => x.CommonId == item.CommonID));

现在,您甚至不需要外部循环。

Contains不接受委托parameter@SriramSakthivel你说得对,我把它改成了Any。Contains不接受委托parameter@SriramSakthivel你说得对,我把它改成了任何。