LINQ查询中的包含顺序和何处的顺序



我有以下内容:

var objectives = _objectivesRepository
                .GetAll()
                .Where(o => o.ExamId == examId || examId == 0)
                .Include(o => o.ObjectiveDetails)
                .ToList();

在上一篇文章中,一位用户说,在LINQ查询中包含的位置很重要。

有人可以让我知道这是否正确吗?订单重要吗?如果有很多地方和包括?

怎么样

在实体框架中是的,它确实很重要,但仅在某些情况下。使用分组或预测时,它将不包括请求的数据。

请参阅有关该主题的博客文章。

实际答案是,通常,该顺序无关紧要。按照您的示例语句,我将描述与关系查询的逻辑翻译步骤:

  1. 获取所有对象,及其所有属性(在关系代数中,它们被视为属性)
  2. 根据您的条件限制检索到的行((关系代数投影操作)
  3. 限制热切加载的回收行的属性(关系代数选择操作)

在您的特定查询中,步骤2和3是可以互换的,而无需更改最终结果。如下所述,这是默认情况。然而,即使最终结果不会改变,表现也会受到重大影响。这就是现代数据库具有查询优化器的原因,该数据库创建了执行计划以优化特定查询。

尽管如此,并非总是如此。因此,我想您总是可以找到以上不适用的情况。关于性能,没有任何假设是安全的。您应该始终衡量事物。您始终可以使用SQL Server Profiler查看LINQ向实体查询到最终SQL查询的翻译。然后,您可以使用SQL Server工具(例如查询分析器)来查看最终SQL查询的执行计划。

希望我有帮助!

最新更新