实体框架SQL查询执行

时间:2010-01-14 15:10:05

标签: c# sql sql-server entity-framework

使用实体框架,当一个人执行查询时,可以说2000个记录需要groupby和其他一些计算,查询是否在服务器上执行,只有结果发送到客户端或是全部发送到客户端然后执行?

这使用SQL Server。

我正在研究这个问题,因为我将要开始一个项目,在这个项目中,大型数据库需要大量查询,并想知道这是否会在网络上产生大量负载,如果使用实体框架。

4 个答案:

答案 0 :(得分:3)

它始终在SQL Server上执行。这也意味着有时你必须改变这个:

from q in ctx.Bar
where q.Id == new Guid(someString)
select q

Guid g = new Guid(someString);
from q in ctx.Bar
where q.Id == g
select q

这是因为构造函数调用无法转换为SQL。

答案 1 :(得分:3)

Sql的groupby和linq的groupby返回不同形状的结果。

Sql的groupby返回密钥和聚合(没有组成员)

Linq的groupby返回键和组成员。

如果您使用这些组成员,则必须通过分组键(重新)提取它们。此可以导致+1数据库往返每组

答案 2 :(得分:3)

我认为所有的数据库查询都是在服务器端完成的(数据库在哪里!)并且结果会被传递。但是,在Linq中,您拥有所谓的Delayed Execution(延迟加载),因此在您尝试访问它之前,实际上并未检索到您的信息,例如调用ToList()或访问属性(相关表)。

如果需要,您可以选择使用LoadWith进行预先加载。

因此,就性能而言,如果您真的只想为查询(具有相关表)进行一次数据库访问,我建议您使用LoadWith选项。但是,它确实取决于具体情况。

答案 3 :(得分:2)

好吧,前段时间我有同样的问题。 基本上:你的linq语句转换为sql语句。但是:有些小组会被翻译,有些则不会 - 取决于你如何撰写你的陈述 是的 - 两者都是可能的

示例:

var a = (from entity in myTable where entity.Property == 1 select entity).ToList();

var a = (from entity in myTable.ToList() where entity.Property == 1 select entity).ToList();