4

我已经与它斗争了很长时间。我有两个集合:MyRepository.All 和 MyCollection,它们都包含具有 ID 属性的对象集合。我需要从 MyRepository 中获取对象列表的结果。所有仅包含 id 等于 MyCollection 的 objects'ids 的对象。

ICollection MyCollection // 作为方法的参数

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

我需要更换???用一些 linq 来完成这项工作。我尝试了不同的位置并选择 caluses,excist 和 intersect 等等..

4

5 回答 5

9
from a in MyRepository.All
join m in MyCollection on a.Id equals m.Id
select a
于 2013-10-21T09:48:29.867 回答
4

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

var myIdSets = new HashSet(MyCollection.Select(c => c.Id));

var result = MyRepository.All.Where(r=> myIdSets.Contains(r.id)).ToList();
于 2013-10-21T09:48:35.060 回答
1
var result = (from r in MyRepository.All
              join r2 in MyCollection on r.id equals r2.id
              select r).ToList();
于 2013-10-21T09:48:19.777 回答
0
MyRepository.All.Where(r=>MyCollection.Select(a=>a.id).Contains(r.id))
于 2013-10-21T09:48:00.140 回答
0

Linq 有一个 .Intersect 可以满足你的需要。

像这样的东西:

var 结果 = MyRepository.Intersect(MyCollection).ToList();

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

于 2013-10-21T12:15:39.463 回答