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

时间:2013-10-21 09:45:24

标签: c# linq collections compare

我已经和它斗争了很长时间。我有两个集合: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等等。

5 个答案:

答案 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