2010-11-05 31 views
1

我有許多在EF4一對多的關係用下列實體:導航許多一對多經由包括在EF4

[學生] - [類] - [Student_Class]

此外我有一個[學校]在[學生]上加入FK的實體。

如果我想有我校的所有學生我做的:

context.School.Include("Student") 

,但如果我想有1RST類我的學生在我的學校?

context.School.Include("Student").Include("Student_Class").Where(... 

我沒做這件事的工作...... 你能幫忙嗎? 編寫完整的Linq選擇也更加智能嗎? 感謝 約翰

+0

它看起來像'Student_Class'是一個協會,不是一個實體...所以它應該被映射爲一個協會。這樣你將擁有'Student.Classes'和'Class.Students'屬性。 – 2010-11-05 13:27:49

+0

Student_Class是一個關聯,但出現在模型中。 – user96547 2010-11-05 13:32:30

+0

你是什麼意思應該被映射爲一個關聯?我該怎麼辦 ? – user96547 2010-11-05 13:33:05

回答

0

如果你想要做一個有條件的渴望負荷,那麼你不應該使用的包括方法。 對於加載包含只屬於第一類 你可以做一個濾波投影返回匿名類型對象的學生貴校對象:

var school = context.School 
        .Where(s => s.SchoolID == 1) // or any other predicate 
        .Select(s => new 
        { 
         School = s, 
         Students = s.Student.Where(st => st.ClassID == 1) 
        }).ToList(); 


另一種方法是利用附加方法返回EntityObject:

var school = context.School.Where(s => s.SchoolID == 1).First() 
var sourceQuery = school.Students.CreateSourceQuery() 
           .Where(st => st.ClassID == 1); 
school.Students.Attach(sourceQuery); 

有關此更詳細的討論,您還可以檢查:
Entity Framework: How to query data in a Navigation property table