我有以下内容:
var objectives = _objectivesRepository
.GetAll()
.Where(o => o.ExamId == examId || examId == 0)
.Include(o => o.ObjectiveDetails)
.ToList();
在上一篇文章中,其中一位用户表示将include之前的位置放在LINQ查询中非常重要。
如果这是正确的,有人可以告诉我吗?订单有关系吗?如果有很多地方和包括在内怎么样?
答案 0 :(得分:1)
在实体框架中是的,它确实很重要,但仅限于某些情况。使用分组或投影时,它将无法包含所请求的数据。
请参阅有关该主题的this博文。
答案 1 :(得分:1)
实际答案是通常,顺序无关紧要。在您的示例语句之后,我将描述关系查询的逻辑转换步骤:
在您的特定查询中,步骤2和3可以互换而不会改变最终结果。如上所述here,这是默认情况。尽管如此,即使最终结果不会改变,性能也会受到很大影响。这就是现代数据库具有查询优化器的原因,该查询优化器创建执行计划以优化特定查询。
然而,并非总是如此。所以,我想你总能找到一个不适用上述情况的案例。关于绩效,没有任何假设是安全的。你应该总是衡量一些事情。您始终可以使用SQL Server profiler查看linq到实体查询到最终SQL查询的转换。然后,您可以使用最终SQL查询的SQL服务器工具(如query analyzer)到see the execution plan。
希望我帮忙!