我们假设我在三个实体之间有以下关系: 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。
答案 0 :(得分:2)
,我猜你可以我可以像这样读取上面的linq表达式:加载所有As,带上所有相关的Bs,同时带来相关的Bs,不要忘记每个B的相关Cs。
路径表达式必须由简单的属性访问表达式以及对选择的调用组成,以便在包含集合属性后组成其他包含。可能的包含路径的示例是:
- 要包含单个引用: 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
。