>我有一个对象,它有一个子对象列表。我想投影或加载每个子对象中包含的导航属性(多个(。我没有试图过度解释它,而是包括下面的类。
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 的答案中,要同时获得ClassSubject
和ClassTeacher
,您可以像这样附加另一个 Include:
Student stud =
ctx.Students.Include("TimetableEntries.ClassSubject").Include("TimetableEntries.ClassTeacher")