比较两个列表中的对象的 id,并获取包含两个列表中 id 都出现的对象的对象列表

本文关键字:列表 对象 id 包含两 获取 两个 比较 | 更新日期: 2023-09-27 18:36:17

我已经为此挣扎了很长时间。我有两个集合:MyRepository.All 和 MyCollection,它们都包含具有 ID 属性的对象集合。我需要从 MyRepository 获取对象列表的结果。所有只包含 id 等于 MyCollection 对象的对象的 id

的对象。

ICollection MyCollection//作为方法的参数

var result = MyRepository.All.Where(r=>r.id==MyCollection.???.id).ToList();

我需要用一些 LINQ 替换???来完成此操作。我尝试了不同的位置并选择了Calus,excist和相交等等。

比较两个列表中的对象的 id,并获取包含两个列表中 id 都出现的对象的对象列表

from a in MyRepository.All
join m in MyCollection on a.Id equals m.Id
select a

将 MyCollection 的 id 缓存到 HashSet 中。
您可以使用如下所示的 Where 子句检索结果:

var myIdSets = new HashSet(MyCollection.Select(c => c.Id));
var result = MyRepository.All.Where(r=> myIdSets.Contains(r.id)).ToList();
var result = (from r in MyRepository.All
              join r2 in MyCollection on r.id equals r2.id
              select r).ToList();
MyRepository.All.Where(r=>MyCollection.Select(a=>a.id).Contains(r.id))

Linq 有一个 .相交,应该得到你想要你需要的。

像这样:

var result = MyRepository.Intersect(MyCollection).ToList();

更多信息:http://msdn.microsoft.com/en-us/library/system.linq.enumerable.intersect.aspx