2010-03-02 169 views
47

我有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))) 

但這顯然會拋出異常。我谷歌它,stackoverflowed,但我認爲我的搜索技能不太好,在這個,任何人都可以給這個忍者awser? (Prefereably在lambda表達式)

回答

91

你試圖讓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