使用Select()方法从数据库中加载三阶实体

本文关键字:加载 实体 数据库 Select 方法 使用 | 更新日期: 2023-09-27 18:24:29

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

每个B只与一个C和一个A相关联。每个A可以有许多B,类似地,每个C可以与许多B相关联。

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

 db.A_dbSet.Include(a => a.Bs.Select(b => b.C).ToList();

这很好用。但是,我不确定Select()在这里是如何工作的。它的功能类似于Include(),但由于A的Bs导航属性是List集合,我们必须使用Select()而不是Include)吗?

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

使用Select()方法从数据库中加载三阶实体

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

我想你可以,根据文件

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

  • 要包含单个引用:查询。包括(e=>e.Level1Reference)
  • 要包含单个集合:查询。包括(e=>e.Level1集合)
  • 要先包含引用,然后再包含下一级的引用:查询。包括(e=>e.Level1Reference.Level2Reference)
  • 要先包含引用,然后再包含下一级的集合:查询。包括(e=>e.Level1Reference.Level2Collection)
  • 要包含一个集合,然后包含一个向下一级的引用:查询。包括(e=>e.Level1集合。选择(l1=>l1。Level2Reference))
  • 要先包含一个集合,然后再包含下一级的集合:查询。包括(e=>e.Level1集合。选择(l1=>l1。Level2集合))
  • 要包含一个集合,然后包含一个向下一级的引用:查询。包括(e=>e.Level1集合。选择(l1=>l1。Level2Reference))
  • 要先包含一个集合,然后再包含下一级的集合:查询。包括(e=>e.Level1集合。选择(l1=>l1。Level2集合))
  • 要包括一个集合、一个引用和一个向下两级的引用:查询。包括(e=>e.Level1集合。选择(l1=>l1。Level2Reference.Level3Reference))
  • 要包含一个集合、一个集合和一个向下两级的引用:查询。包括(e=>e.Level1集合。选择(l1=>l1。Level2Collection。选择(l2=>l2。Level3Reference)))

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