2009-02-06 121 views
9

我有一個名爲Gigs的對象集合。在LINQ中查詢子集合

每個Gig有一個Acts集合。

使用Linq我想查詢我的演出集合以獲取所有演出,其中演員的id爲7例如。

act.id = 7; 

於是我開始書面方式......

return from gig in qry 
     where gig.Acts //not sure how to do this bit 
     select gig; 

但我不知道如何設置的子集合稱爲行爲條件。

任何想法?

回答

7
var x = gigs.Where(g=>g.Acts.Select(a=>a.ID).Contains(7)); 

這兩個查詢也返回相同的:

var x = gigs.Where(g=>g.Acts.Count(a=>a.ID == 7) > 0); 

var x = gigs.Where(g=>g.Acts.FirstOrDefault(a=>a.ID == 7) != null); 
+0

LINQ的是真的,奇怪,因爲有一對夫婦的方式來寫相同的查詢。 – 2009-02-06 18:42:02

+0

因此,完整的請求是...... var x = gigs.Where(g => g.Acts.Select(a => a.Artist.ID).Contains(7)); 如果藝術家爲空(這是完全有效的),我會得到一個例外... 'Shared.DO.Act'的Shared.DO.Artist Artist'對於'System.Collections.Generic.List`類型不合法1 [Shared.DO.Act] 嗯想法? – iasksillyquestions 2009-02-06 19:16:02

11

基本相同Mike_G,只有更詳細的語法和使用的平等。

var myCollection = from gig in qry 
        where gig.Acts.Any(act => act.ID == 7) 
        select gig; 

只是一個編輯帶來評論答案:

其實查詢是針對該法案的對象,可以是零上的成員(藝術家)的ID。

新查詢:

var myCollection = from gig in qry 
        where gig.Acts.Any(act => (null != act.Artist) && (act.Artist.ID == 7)) 
        select gig;