I have two lists : ListA<A>
and ListB<B>
Structure of object:
Object A : - commonID , AName
Object B : - commonID , BName
Now my objective is very simple, I'm trying to remove all items in ListA
that having the same commonID
as in ListB
. Below is what I've tried:
foreach(var item in ListB)
ListA.Remove(x=>x.commonID == item.commonID)
It's throwing exception:
Cannot convert lambda expression to type 'A' because it is not a delegate type
May I know which part am I doing it wrong?
You're currently using Remove
(which takes an individual item to remove) instead of RemoveAll
(which takes a predicate).
However, a better approach might be to create a set of all IDs you want to remove, and then use a single call to RemoveAll
:
HashSet<string> idsToRemove = new HashSet<string>(ListB.Select(x => x.commonID));
ListA.RemoveAll(x => idsToRemove.Contains(x.commonID));
Or if your lists are small enough that you're not worried about it being an O(N*M) operation, you can use:
ListA.RemoveAll(x => ListB.Any(y => x.commonID == y.commonID));
See more on this question at Stackoverflow