小编典典

EF LINQ 包括多个和嵌套的实体

all

好的,我有具有以下层次结构的三级实体:课程->模块->章节

这是原始的 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);

关于包括第二个实体的任何想法?

任何建议或信息将不胜感激。谢谢!


阅读 69

收藏
2022-08-08

共1个答案

小编典典

您是否尝试过添加另一个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 您希望它包含来自其他表的数据。

Include 语法也可以是字符串。像这样:

           db.Courses
            .Include("Module.Chapter")
            .Include("Lab")
            .Single(x => x.Id == id);

LinqPad中的示例更好地解释了这一点。

2022-08-08