C# 使用Select()方法从数据库中加载第三级实体

C# 使用Select()方法从数据库中加载第三级实体,c#,entity-framework,linq,C#,Entity Framework,Linq,让我们假设我在三个实体之间有以下关系:A->B->C 每个Bs仅与一个C和一个A相关联。每个A可以具有多个Bs,并且类似地,每个C可以与多个Bs相关联 当我从数据库获取A记录时,我有以下Linq来加载Cs: db.A_dbSet.Include(a => a.Bs.Select(b => b.C).ToList(); 这个很好用。但是,我不确定Select()在这里是如何工作的。它的功能是否类似于Include(),但我们必须使用Select()而不是Include(),因为它是

让我们假设我在三个实体之间有以下关系:A->B->C

每个Bs仅与一个C和一个A相关联。每个A可以具有多个Bs,并且类似地,每个C可以与多个Bs相关联

当我从数据库获取A记录时,我有以下Linq来加载Cs:

 db.A_dbSet.Include(a => a.Bs.Select(b => b.C).ToList();
这个很好用。但是,我不确定Select()在这里是如何工作的。它的功能是否类似于Include(),但我们必须使用Select()而不是Include(),因为它是列表集合的Bs导航属性

我可以这样读上面的linq表达式吗:加载所有As,带上所有相关的Bs,同时带上相关的Bs不要忘记每个B的相关Cs

我可以这样读上面的linq表达式吗:加载所有As,带上所有相关的Bs,同时带上相关的Bs不要忘记每个B的相关Cs

我想你可以,根据

路径表达式必须由简单的属性访问表达式和对Select的调用组成,以便在包含集合属性后组成其他包含。可能包含路径的示例包括:

  • 包含单个引用:query.include(e=>e.Level1Reference)
  • 要包含单个集合,请执行以下操作:query.include(e=>e.Level1Collection)
  • 先包含一个引用,然后再向下一级包含一个引用:query.include(e=>e.Level1Reference.Level2Reference)
  • 要先包含引用,然后再包含一个向下一级的集合,请执行以下操作:query.include(e=>e.Level1Reference.Level2Collection)
  • 要包括一个集合,然后再包括一个向下一级的引用:query.include(e=>e.Level1Collection.Select(l1=>l1.Level2Reference))
  • 要先包含一个集合,然后再向下一级包含一个集合:query.include(e=>e.Level1Collection.Select(l1=>l1.Level2Collection))
  • 要包括一个集合,然后再包括一个向下一级的引用:query.include(e=>e.Level1Collection.Select(l1=>l1.Level2Reference))
  • 要先包含一个集合,然后再向下一级包含一个集合:query.include(e=>e.Level1Collection.Select(l1=>l1.Level2Collection))
  • 要包含一个集合、一个引用和一个引用,需要向下两级:query.include(e=>e.Level1Collection.Select(l1=>l1.Level2Reference.Level3Reference))
  • 要包含一个集合、一个集合和一个引用,需要向下两层:query.include(e=>e.Level1Collection.Select(l1=>l1.Level2Collection.Select(l2=>l2.Level3Reference)))

据我所知,
Select
只是一个可识别的表达式占位符,类似于规范函数,但特定于
Include

,这是我要找的文档,谢谢!