加载包含列表的相关嵌套实体



>我有一个对象,它有一个子对象列表。我想投影或加载每个子对象中包含的导航属性(多个(。我没有试图过度解释它,而是包括下面的类。

public class Subject
{
    public int SubjectId { get; set; }
    public int SubjectDescription { get; set; }
}
public class Teacher
{
    public int TeacherId { get; set; }
    public string TeacherName { get; set; }
}
public class StudentTimetableEntry
{
    public int StudentTimetableEntryId { get; set; }
    public int ClassId { get; set; }
    public Teacher ClassTeacher { get; set; }
    public Subject ClassSubject { get; set; }
}
public class Student
{
    public int StudentId { get; set; }
    public string StudentName { get; set; }
    public List<StudentTimetableEntry> TimetableEntries { get; set; }
}

然后,我想加载一个学生条目,包括学生TimetableEntries的结果。这本身就很好。我这样做如下,我认为这是正确的....

 using (MyDbContext ctx = new MyDbContext())
    {
        Student stud = ctx.Students
            .Include(
                        sa => sa.TimetableEntries.Select(te => te.ClassSubject)
                    ).FirstOrDefault();
    }

但我还想加载与每个 TimetableEntry 关联的 ClassTeacher 属性(除了 ClassSubject 属性(。不过,似乎没有办法Select多个属性。我试图Select匿名类型...

        using (MyDbContext ctx = new MyDbContext())
        {
            Student stud = ctx.Students
                .Include(
                            sa => sa.TimetableEntries.Select(
                                te => new
                                {
                                    ClassSubject = te.ClassSubject,
                                    ClassTeacher = te.ClassTeacher
                                })
                        ).FirstOrDefault();
        }

但这导致了以下错误:

包含路径表达式必须引用导航属性 在类型上定义

有人可以解释我做错了什么以及如何克服这一点吗?

非常感谢

T

您也可以指定一个字符串,如本文所述。

在您的情况下,它将是这样的:

Student stud = ctx.Students.Include("TimetableEntries.ClassSubject") 

为了添加到 Ouarzy 的答案中,要同时获得ClassSubjectClassTeacher,您可以像这样附加另一个 Include:

Student stud = ctx.Students.Include("TimetableEntries.ClassSubject").Include("TimetableEntries.ClassTeacher")

最新更新