Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linq 在实体框架中运行复杂的行查询时,查询在哪里运行?_Linq_Entity Framework - Fatal编程技术网

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

Linq 在实体框架中运行复杂的行查询时,查询在哪里运行?,linq,entity-framework,Linq,Entity Framework,如果我运行一个实体框架linq查询,该查询包含多个where子句、分组和order by语句,这会占用本地计算机上的资源还是在SQL server上运行?linq使用本地资源,但EF中发生的SQL转换会在SQL server上运行 还有一些其他的复杂之处。Linq在某些情况下使用惰性计算,因此它实际上可能不会一次将整个集合交给您。相反,它将为您提供一个状态引擎(本质上是一个收益返回;一个IQueryable),它将根据您的代码要求生成记录。简单的答案是“两者都有”。您可以以这样一种方式构造查询:

如果我运行一个实体框架linq查询,该查询包含多个where子句、分组和order by语句,这会占用本地计算机上的资源还是在SQL server上运行?

linq使用本地资源,但EF中发生的SQL转换会在SQL server上运行

还有一些其他的复杂之处。Linq在某些情况下使用惰性计算,因此它实际上可能不会一次将整个集合交给您。相反,它将为您提供一个状态引擎(本质上是一个
收益返回
;一个
IQueryable
),它将根据您的代码要求生成记录。

简单的答案是“两者都有”。您可以以这样一种方式构造查询:大部分处理将在RDBMS端进行,过滤、投影和聚合将远程完成。然而,为了将数据转换为对象,客户端也需要做一些工作

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


完成RDBMS后,结果将发送回客户端。此时,结果将转换为通过EF检索的对象,将执行推迟到需要时。如果使用
ToList()
ToArray()
,转换会立即进行。如果在
ToList()
ToArray()
AsEnumerable()
调用之后使用附加子句,则会在客户端进行附加处理。

如果查询中没有任何具体化方法(期望最终结果的具体化),则它将在SQL Server上运行。