好的,我有具有以下层次结构的三级实体:课程->模块->章节
这是原始的 EF LINQ 语句:
Course course = db.Courses .Include(i => i.Modules.Select(s => s.Chapters)) .Single(x => x.Id == id);
现在,我想包含另一个与课程相关联的名为 Lab 的实体。
如何包含 Lab 实体?
我尝试了以下但没有奏效:
Course course = db.Courses .Include(i => i.Modules.Select(s => s.Chapters) && i.Lab) .Single(x => x.Id == id);
关于包括第二个实体的任何想法?
任何建议或信息将不胜感激。谢谢!
您是否尝试过添加另一个Include:
Include
Course course = db.Courses .Include(i => i.Modules.Select(s => s.Chapters)) .Include(i => i.Lab) .Single(x => x.Id == id);
您的解决方案失败,因为Include不采用布尔运算符
Include(i => i.Modules.Select(s => s.Chapters) && i.Lab) ^^^ ^ ^ list bool operator other list
更新 要了解更多信息,请下载LinqPad并查看示例。我认为这是熟悉 Linq 和 Lambda 的最快方法。
Select首先 -和之间的区别在于Include,使用 Select 您可以决定 要 返回的内容(也称为投影)。Include 是一个 Eager Loading 函数,它告诉 Entity Framework 您希望它包含来自其他表的数据。
Select
Include 语法也可以是字符串。像这样:
db.Courses .Include("Module.Chapter") .Include("Lab") .Single(x => x.Id == id);
但LinqPad中的示例更好地解释了这一点。