C# 如何加载导航属性的属性?

C# 如何加载导航属性的属性?,c#,entity-framework,lazy-loading,C#,Entity Framework,Lazy Loading,我正在尝试使用导航属性的即时加载创建查询。是否有方法加载导航属性的属性?当我尝试下面的代码时,我得到一个“sequence contains no element”异常 var viewModel = new InstructorIndexData(); viewModel.Instructors = db.Instructors.Include(i => i.OfficeAssignment) .Include(i=>i.Ass

我正在尝试使用导航属性的即时加载创建查询。是否有方法加载导航属性的属性?当我尝试下面的代码时,我得到一个“sequence contains no element”异常

       var viewModel = new InstructorIndexData();
        viewModel.Instructors = db.Instructors.Include(i => i.OfficeAssignment)
            .Include(i=>i.Assignments) 
             .Include(i => i.Students)
             .Include (i=>i.Enrollments )
            .Include(i => i.Courses.Select(c => c.Department))
            .OrderBy(i => i.LastName);

        viewModel.Courses = viewModel.Instructors.Where(i => i.InstructorID == id).Single().Courses;
        viewModel.Enrollments = viewModel.Courses.Where(x => x.CourseID == courseID).Where( e=>e.Enrollments.First().InstructorFullName == "Kim Abercrombie").Single().Enrollments;
但是,当我使用:

            viewModel.Enrollments = viewModel.Courses.Where(x => x.CourseID == courseID).Single().Enrollments;
它将填充我的viewModel.Enrollment属性。有没有办法在linq查询中访问这种类型的复杂属性

是否有方法加载导航属性的属性

看起来您已经知道如何快速加载多个级别:

viewModel.Instructors = db.Instructors.Include(i => i.OfficeAssignment)
        .Include(i=>i.Assignments) 
         .Include(i => i.Students)
         .Include (i=>i.Enrollments )
        .Include(i => i.Courses.Select(c => c.Department))
        .OrderBy(i => i.LastName);
这就是您可能遇到异常的地方(或者您对
.Single()
的其他使用):

对于
.Single()

返回序列的唯一元素,如果 序列中没有一个元素

下面是我如何解决它的。 var selectTemp=viewModel.Courses.Where(x=>x.CourseID==CourseID).Single()注册

            var selectedTeacher = from t in selectTemp where t.InstructorFullName == teacher select t;


            viewModel.Enrollments = selectedTeacher;

我尝试使用First和FirstOrDefault(),但出现异常“对象引用未设置为对象的实例”。关于如何在运行时访问该属性,您有什么想法吗?@CloudyKooper,这两个想法对您都没有帮助您的问题是您的查询没有返回任何项目。因此,
Single()
First()
将抛出异常,
FirstOrDefault()
将返回null,然后在尝试访问不存在的对象上的属性时抛出null引用异常。当我在db.Enrollments中使用var selectedTeacher=from t时,其中t.InstructorFullName==“Kim Abercrombie”选择t;它返回我期望的名称,因此我猜类型字符串和类型注册之间存在冲突。。我对这一点还是相当陌生,所以我不确定。@CloudyCooper,尝试将
e=>e.Enrollments.First().InstructorFullName==…
更改为
e=>e.Enrollments.Any(x=>x.InstructorFullName==…)
Any()似乎会返回所有记录,而不仅仅是字符串“Kim Abercrombie”关联的记录。
            var selectedTeacher = from t in selectTemp where t.InstructorFullName == teacher select t;


            viewModel.Enrollments = selectedTeacher;