Linq查询列表包含列表

问题描述:

我有2类的:Linq查询列表包含列表

public class ObjectA 
{ 
    public int Id; 
    public string Name; 
} 

public class ObjectB 
{ 
    public int Id; 
    public string Name; 
    public List<ObjectA> ListOfObjectA; 
} 

所以,我有两个列表:一个对象B(ListObjectB)和另一种包含(称为ListOfIdsA)对象A的ID的列表。 如果这我想获得ObjectB的列表,其中ObjectB.ListOfObjectA在ListOfIdsA中。

我的第一个(错误的)方法是

ListObjectB.Where(p=> ListOfIdsA.Contains(p.ListOfObjectA.Select(b=>b.Id))) 

但这显然会抛出异常。我谷歌它,*ed,但我认为我的搜索技能不太好,在这个,任何人都可以给这个忍者awser? (Prefereably在lambda表达式)

你试图让ObjectBs的列表,其中所有ObjectAs的在ListOfIdsA,或其中任何

我想你想要么:(你可能想使ListOfIdsA一个HashSet<string>,如果它是显著的大小,顺便说一句)

ListObjectB.Where(p => p.ListOfObjectA.Any(x => ListOfIdsA.Contains(x.Id))) 

ListObjectB.Where(p => p.ListOfObjectA.All(x => ListOfIdsA.Contains(x.Id))) 

+0

学到新的东西每天......出于某种原因,我在考虑扩展方法是解决这个问题的方法。 – 2010-03-02 15:12:41

+0

我想要它们中的任何一个。 Thx的快速反应(这是我的第一个问题在这里,该死的,这是快!) – Berto 2010-03-02 15:21:03

+2

@Justin:那么,所有和任何* * *扩展方法:) – 2010-03-02 15:35:32