我有以下内容:
var objectives = _objectivesRepository
.GetAll()
.Where(o => o.ExamId == examId || examId == 0)
.Include(o => o.ObjectiveDetails)
.ToList();
在上一篇文章中,一位用户说,在LINQ查询中包含的位置很重要。
有人可以让我知道这是否正确吗?订单重要吗?如果有很多地方和包括?
在实体框架中是的,它确实很重要,但仅在某些情况下。使用分组或预测时,它将不包括请求的数据。
请参阅有关该主题的博客文章。
实际答案是,通常,该顺序无关紧要。按照您的示例语句,我将描述与关系查询的逻辑翻译步骤:
- 获取所有对象,及其所有属性(在关系代数中,它们被视为属性)
- 根据您的条件限制检索到的行((关系代数投影操作)
- 限制热切加载的回收行的属性(关系代数选择操作)
在您的特定查询中,步骤2和3是可以互换的,而无需更改最终结果。如下所述,这是默认情况。然而,即使最终结果不会改变,表现也会受到重大影响。这就是现代数据库具有查询优化器的原因,该数据库创建了执行计划以优化特定查询。
尽管如此,并非总是如此。因此,我想您总是可以找到以上不适用的情况。关于性能,没有任何假设是安全的。您应该始终衡量事物。您始终可以使用SQL Server Profiler查看LINQ向实体查询到最终SQL查询的翻译。然后,您可以使用SQL Server工具(例如查询分析器)来查看最终SQL查询的执行计划。
希望我有帮助!