通过EF4中的包含来导航多对多

时间:2010-11-05 13:19:15

标签: entity-framework entity-framework-4

我在EF4中与以下实体有很多关系:

[学生] - [班级] - [学生_Class]

此外,我有一个[学生]实体,[学生]有一个FK。

如果我想让我学校的所有学生都这样做:

context.School.Include("Student")

但如果我想在学校里安排我的第一堂课?

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

我无法让这件事工作...... 你能帮我吗 ? 写一个完整的Linq选择也更聪明吗? 谢谢 约翰

1 个答案:

答案 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