然后你应该把你的模型改成这样:
public class Student
{
public int StudentId {get;set;}
public string StudentFirstName {get;set;}
public string StudentLastName {get;set;}
public virtual ICollection<StudentSchedule> StudentSchedules {get;set;}
}
class StudentSchedule
{
public int StudentScheduleId {get;set;}
public int StudentId {get;set;}
public string ClassName {get;set;}
public virtual Student Student {get;set;}
}
那么您的查询将是:
var students = db.Students
.Include(s=>s.StudentSchedules)
.Where(studentBuilder)
.ToList();
没有谓词构建器:
var students = db.Students
.Include(s=>s.StudentSchedules)
.Where(s=>s.StudentLastName == "Smith")
.ToList();
我个人的偏好是不要在属性中重复实体类型,除非它是外部属性,所以我的模型是这样的:
public class Student
{
public int Id {get;set;}
public string FirstName {get;set;}
public string LastName {get;set;}
public virtual ICollection<StudentSchedule> Schedules {get;set;}
}
class StudentSchedule
{
public int Id {get;set;}
public int StudentId {get;set;}
public string ClassName {get;set;}
public virtual Student Student {get;set;}
}
当然,您可能需要一个更详细的模型,其中包含“主题”(姓名、先决条件等)、“班级”(主题、教室、时间表、教职员工)、“学生”(名字、姓氏、班级)、“教职员工” " (FirstName, LastName, JobTitle, Classes) 和 "Schedules" (星期几, 开始时间, 结束时间, Classes)。