我已经为此挣扎了很长时间。我有两个集合:MyRepository.All 和 MyCollection,它们都包含具有 ID 属性的对象集合。我需要从 MyRepository 获取对象列表的结果。所有只包含 id 等于 MyCollection 对象的对象的 id
的对象。ICollection MyCollection//作为方法的参数
var result = MyRepository.All.Where(r=>r.id==MyCollection.???.id).ToList();
我需要用一些 LINQ 替换???来完成此操作。我尝试了不同的位置并选择了Calus,excist和相交等等。
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