我在EF4中与以下实体有很多关系:
[学生] - [班级] - [学生_Class]
此外,我有一个[学生]实体,[学生]有一个FK。
如果我想让我学校的所有学生都这样做:
context.School.Include("Student")
但如果我想在学校里安排我的第一堂课?
context.School.Include("Student").Include("Student_Class").Where(...
我无法让这件事工作...... 你能帮我吗 ? 写一个完整的Linq选择也更聪明吗? 谢谢 约翰
答案 0 :(得分:0)
如果您想进行条件预先加载,那么您不应该使用 Include 方法。 用于加载仅包含属于第一类学生的学校对象 您可以执行 过滤的投影 ,它会返回匿名类型对象:
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