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

2019-03-10 05:36发布

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.

标签: linq lambda
2条回答
Evening l夕情丶
2楼-- · 2019-03-10 06:11

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));
查看更多
Juvenile、少年°
3楼-- · 2019-03-10 06:21

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);
查看更多
登录 后发表回答