我有一个规范化的数据库,并且无法制作一个 EF 查询来执行选择,一次将来自多个不同表的足够信息连接在一起。
我意识到我可以发出单独的查询来提取相关数据,但我想看看是否可以一次(急切地)查询所有内容。
数据模型如下所示:
- Template有一个 ref_TemplateType、一个 ref_FormType 和多个 TemplateMeasurements
- TemplateMeasurement有一个测量值
- Measurement有一个 ref_MeasurementType 和一个 Review
我想提取所有模板的列表,包括上面的所有关联实体。
这是我开始的:
var test = dc.Templates
.Include(x => x.ref_TemplateType)
.Include(x => x.ref_FormType)
.Include(x => x.TemplateMeasurements)
.ToList();
到目前为止,一切都很好。
不,我想包含属于每个 TemplateMeasurement 实体的测量实体。所以我做了以下事情(因为 TemplateMeasurements 是一个列表):
var test = dc.Templates
.Include(x => x.ref_TemplateType)
.Include(x => x.ref_FormType)
.Include(x => x.TemplateMeasurements.Select(y => y.Measurement))
.ToList();
完美的。出色的。(极好。)现在对于每个 TemplateMeasurement,它正在加入以提取适当的测量记录。
但是……这还不够好。我还希望每个测量对象的“ref_MeasurementType”相关实体。所以我像这样优化我的查询:
var test = dc.Templates
.Include(x => x.ref_TemplateType)
.Include(x => x.ref_FormType)
.Include(x => x.TemplateMeasurements.Select(y => y.Measurement.ref_MeasurementType))
.ToList();
这也有效!(生活不是很美好吗?)
但是等一下............我想要的每个测量对象上都有另一个相关实体,称为“审查”。
我怎么也应该急切地去拿这个???它不会进入上面的 .Select() 方法调用......因为该方法已被用于拉入“ref_MeasurementType”实体。
我如何也急切地获取此查询中的“评论”实体?
(见下文,因为我在写这个问题时想出了解决方案)