为什么在 entity framework 代码中使用 Single() 时 Include() 不可用 api

Why Include() not available when Single() is used in entity framework code first fluent api

我想知道为什么Include() 不能在Single() 之后在eager-loading 中使用。例如,在以下代码段中,Include 不可用:

db.Teachers.Single(p => p.Id == currUserId)
           .Include(t => t.OfferedCourses)
           .RegisteredCourses
           .ToList();

但是,如果我在 Include() 之后有 Single(),它会起作用:

db.Teachers.Include(t => t.OfferedCourses)
           .Single(p => p.Id == currUserId)               
           .RegisteredCourses
           .ToList();

这样会返回很多不必要的相关数据。以下是我最终采用的方法:

 db.Teachers.Where(p => p.Id == currUserId)
            .Include(t => t.OfferedCourses)
            .First()
            .RegisteredCourses
            .ToList();

这是唯一的解决办法吗?

以下是对post标题问题的回答:

Why Include() not available when Single() is used in entity framework code first fluent api

.Include() 是 Linq-To-Entities 中的扩展方法,需要类型 IQueryable

当您指定 db.Teachers.Include()db.Teacher.Where().Include() 时,您就满足了此要求,因为 db.Teachersdb.Teachers.Where() return 都键入了 IQueryable

但是当您指定 db.Teachers.Single() 时 return 类型 Teacher 将无法用于 Include().