使用实体框架,当一个人执行查询时,可以说2000个记录需要groupby和其他一些计算,查询是否在服务器上执行,只有结果发送到客户端或是全部发送到客户端然后执行?
这使用SQL Server。
我正在研究这个问题,因为我将要开始一个项目,在这个项目中,大型数据库需要大量查询,并想知道这是否会在网络上产生大量负载,如果使用实体框架。
答案 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)
示例:
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();