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

时间:2015-11-26 15:16:48

标签: c# entity-framework linq

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

每个B只与一个C和一个A相关联。每个A可以有很多B,同样每个C可以与许多B相关联。

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

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

这很好用。但是,我不确定Select()的功能如何。它的功能是否与Include()类似,但我们必须使用Select()而不是Include(),因为A的Bs导航属性是List集合?

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

1 个答案:

答案 0 :(得分:2)

  

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

根据documentation

,我猜你可以
  

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

     
      
  • 要包含单个引用: 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