Linq 在实体框架中运行复杂的行查询时,查询在哪里运行?
如果我运行一个实体框架linq查询,该查询包含多个where子句、分组和order by语句,这会占用本地计算机上的资源还是在SQL server上运行?linq使用本地资源,但EF中发生的SQL转换会在SQL server上运行 还有一些其他的复杂之处。Linq在某些情况下使用惰性计算,因此它实际上可能不会一次将整个集合交给您。相反,它将为您提供一个状态引擎(本质上是一个Linq 在实体框架中运行复杂的行查询时,查询在哪里运行?,linq,entity-framework,Linq,Entity Framework,如果我运行一个实体框架linq查询,该查询包含多个where子句、分组和order by语句,这会占用本地计算机上的资源还是在SQL server上运行?linq使用本地资源,但EF中发生的SQL转换会在SQL server上运行 还有一些其他的复杂之处。Linq在某些情况下使用惰性计算,因此它实际上可能不会一次将整个集合交给您。相反,它将为您提供一个状态引擎(本质上是一个收益返回;一个IQueryable),它将根据您的代码要求生成记录。简单的答案是“两者都有”。您可以以这样一种方式构造查询:
收益返回
;一个IQueryable
),它将根据您的代码要求生成记录。简单的答案是“两者都有”。您可以以这样一种方式构造查询:大部分处理将在RDBMS端进行,过滤、投影和聚合将远程完成。然而,为了将数据转换为对象,客户端也需要做一些工作
EF查询通过IQueryable
将LINQ表达式转换为SQL,并将其发送到RDBMS执行。当然,这需要RDBMS方面的资源
完成RDBMS后,结果将发送回客户端。此时,结果将转换为通过EF检索的对象,将执行推迟到需要时。如果使用
ToList()
或ToArray()
,转换会立即进行。如果在ToList()
、ToArray()
或AsEnumerable()
调用之后使用附加子句,则会在客户端进行附加处理。如果查询中没有任何具体化方法(期望最终结果的具体化),则它将在SQL Server上运行。