如果我运行一个具有多个where子句,分组和order by语句的实体框架linq查询,它是否会占用我本地计算机上的资源,还是在SQL服务器上运行?
答案 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
),它会在您的代码需要时生成记录。