为什么在 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.Teachers
和 db.Teachers.Where()
return 都键入了 IQueryable
。
但是当您指定 db.Teachers.Single()
时 return 类型 Teacher
将无法用于 Include()
.
我想知道为什么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.Teachers
和 db.Teachers.Where()
return 都键入了 IQueryable
。
但是当您指定 db.Teachers.Single()
时 return 类型 Teacher
将无法用于 Include()
.