我有一个具有子对象列表的对象。我想投影或加载每个子对象中包含的导航属性(多个)。我没有试图过度解释它,而是包括下面的类。
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();
}
但是这导致了以下错误:
Include路径表达式必须引用导航属性 在类型
上定义
有人可以解释我做错了什么以及如何克服这个问题?
非常感谢
Ť
答案 0 :(得分:1)
您也可以指定一个字符串,如this article中的解释。
在你的情况下,它会像:
Student stud = ctx.Students.Include("TimetableEntries.ClassSubject")
答案 1 :(得分:1)
要添加到Ouarzy的答案中,要同时获得ClassSubject
和ClassTeacher
,您可以添加另一个Inlcude:
Student stud =
ctx.Students.Include("TimetableEntries.ClassSubject").Include("TimetableEntries.ClassTeacher")