LINQ Lambda - Find all ID's in one list that d

2019-03-10 05:38发布

问题:

I have two collections of objects (List list1 and List list2). There is a property on each called "ID". I know that list2 will always have more items than list1, I just need an easy way to get a collection of all the items that exist in list2 but not list1 using LINQ lambda expressions.

回答1:

If you only need the IDs of the items then Mark's answer will do the trick nicely. If you need to return the items themselves (and they don't already have a suitable Equals implementation) then you could try something like this:

// assumes that the ID property is an int - change the generic type if it's not
var ids = new HashSet<int>(list1.Select(x => x.ID));
var results = list2.Where(x => !ids.Contains(x.ID));


回答2:

This will get you the IDs that are only in list2:

var ids = list2.Select(x => x.Id).Except(list1.Select(x => x.Id));

If your objects compare equal when they have the same ID then you can simplify it to:

var objects = list2.Except(list1);


标签: linq lambda