2013-11-21 33 views
0

我想做一個對象的孩子在哪裏。因此,例如:MVC凡孩子的條件(hasMany)

型號schoolclass有孩子,我想只有一個名爲漢克

Model Schoolclass 
    int ID 
    string Classname 
    virtual ICollection<Children> Children 

Model Child 
    int ID 
    int ClassID 
    string FirstName 
    string LastName 

this.db.Schoolclass.Where(sc => 
    sc.ID == 4 && 
    sc.Children.FirstName == "Hank" 
).FirstOrDefault(); 

,但孩子的孩子schoolclass不能直接訪問的,「因爲它是一個的hasMany關係。

我必須使用Any嗎?

這樣我查詢接收到的數據(但我並不需要所有的孩子,這是開銷)

Schoolclass = this.db.Schoolclass.Where(sc => 
    sc.ID == 4) 
.FirstOrDefault(); 

Schoolclass.Children = Schoolclass.Children.Where(c => c.FirstName == "Hank").ToList(); 
+0

爲什麼在表達式中包含'sc.ID == 4'條件? ID爲4的'SchoolClass'是否有孩子? –

+0

是的SchoolClass有20個孩子和2個名字叫「漢克」,我想和那兩個孩子一起上課 –

回答

0

我想你想要這樣的:

this.db.Schoolclass.Where(sc => 
    sc.ID == 4 && 
    sc.Children.Any(x=>x.FirstName == "Hank") 
).FirstOrDefault(); 

或者簡單:

this.db.Schoolclass.FirstOrDefault(sc => sc.ID == 4 && 
         sc.Children.Any(x=>x.FirstName == "Hank")); 
+1

真的嗎?當然,要獲得所有屬性等於某些東西的孩子......你應該刪除'sc.ID == 4 &&'部分..因爲表達式的這一方本身是極其有限的。 –

+0

我叮叮噹我有一個名叫漢克的小孩時,我會和他所有的孩子一起拿到學校課,當沒有孩子名爲漢克學校班時,將會是空的 –

+0

@SimonWhitehead你真的明白OP想要什麼嗎?表達沒有錯,第一個'sc.ID == 4'選擇學校,第二個'sc.Children.Any'將檢查該學校是否有任何'FirstName'爲'Hank'的孩子。如果您刪除第一個條件,**將搜索所有學校**並返回滿足第二個條件的第一個條件。 –

1

「我想要所有孩子都叫做漢克的學校課程」:
this.db.Schoolclass.FirstOrDefault(sc => sc.Children.All(c => c.FirstName == "Hank"));

+0

我想如果所有的孩子都被命名爲hank或者返回null –

+0

好吧,如果我現在看到我的問題,也許我問錯了,問題重寫,現在說:只有名爲「Hank」的孩子 –

+0

「全部」意味着所有班級的孩子都應該有「漢克」的名字。 – Vladimir