I have 2 list:
myObject object1 = new myObject(id = 1, title = "object1"};
myObject objec开发者_Go百科t2 = new myObject(id = 2, title = "object2"};
myObject object3 = new myObject(id = 3, title = "object3"};
//List 1
List<myObject> myObjectList = new List<myObject>{object1, object2, object3};
//List 2
List<int> idList = new List<int>{2, 3};
Is there a way using Linq to pull only the objects in the first list that exist in the second list so that I am left with:
{object2, object3}
I looked at intersect but it seems that this will only work if both list are of the same type.
Any help would be greatly appreciated.
Thanks.
LINQ Solution:
myObjectList = myObjectList.Where(X => idList.Contains(X.id)).ToList();
IEnumerable<myObject> matches = myObjectList.Join(
idList,
o => o.Id,
id => id,
(o, id) => o);
The official LINQ solution as of .Net 6 is IntersectBy
:
var matches = myObjectList.IntersectBy(idList, o => o.Id);
精彩评论