在实体框架中运行复杂的行查询时,查询在哪里运行?

时间:2015-01-27 16:41:55

标签: linq entity-framework

如果我运行一个具有多个where子句,分组和order by语句的实体框架linq查询,它是否会占用我本地计算机上的资源,还是在SQL服务器上运行?

2 个答案:

答案 0 :(得分:2)

简短的回答是“两个”。您可以构建查询,使得大部分处理将在RDBMS端进行,远程完成过滤,投影和聚合。但是,为了将数据转换为对象,客户端也需要做一些工作。

EF查询通过IQueryable<T>将LINQ表达式转换为SQL,并将其发送到RDBMS以供执行。当然,这需要RDBMS方面的资源。

完成RDBMS后,结果将发送回客户端。此时,结果将转换为您通过EF检索的对象,将执行推迟到您需要的时间点。如果您使用ToList()ToArray(),转换会立即发生。如果您在ToList()ToArray()AsEnumerable()电话后使用其他条款,则会在客户端进行其他处理。

答案 1 :(得分:1)

Linq使用本地资源,但在EF中发生的SQL转换在SQL Server上运行。

还有其他一些错综复杂的东西。 Linq在某些情况下使用延迟评估,因此它实际上可能不会立即将整个集合交给内存。相反,它将为您提供一个状态引擎(一个yield return,基本上是一个IQueryable),它会在您的代码需要时生成记录。