我已经和它斗争了很长时间。我有两个集合:MyRepository.All和MyCollection,它们都拥有具有ID属性的对象集合。我需要从MyRepository.All获取对象列表的结果,其中只包含id等于MyCollection的对象'的对象。
ICollection MyCollection //作为方法的参数
var result = MyRepository.All.Where(r=>r.id==MyCollection.???.id).ToList();
我需要更换???用一些linq来完成这件事。 香港专业教育学院尝试不同的地方,选择caluses,excist和intersect等等。
答案 0 :(得分:8)
from a in MyRepository.All
join m in MyCollection on a.Id equals m.Id
select a
答案 1 :(得分: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();
答案 2 :(得分:1)
var result = (from r in MyRepository.All
join r2 in MyCollection on r.id equals r2.id
select r).ToList();
答案 3 :(得分:0)
MyRepository.All.Where(r=>MyCollection.Select(a=>a.id).Contains(r.id))
答案 4 :(得分:0)
Linq有一个.Intersect可以让你想要你。
这样的事情:
var result = MyRepository.Intersect(MyCollection).ToList();
更多信息: http://msdn.microsoft.com/en-us/library/system.linq.enumerable.intersect.aspx