首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否合并了不同的IQueryable对象?

问是否合并了不同的IQueryable对象?
EN

Stack Overflow用户
提问于 2012-10-03 02:43:00
回答 1查看 111关注 0票数 1

我有一个小程序,需要做一些计算的数据范围。这个范围可能包含大约50万条记录。我只是查看了我的数据库,发现执行了一个group by。

我认为结果是在第一行执行的,后来我只是处理RAM中的数据。但现在我认为查询构建器组合了表达式。

代码语言:javascript
复制
var Test = db.Test.Where(x => x > Date.Now.AddDays(-7));
var Test2 = (from p in Test 
             group p by p.CustomerId into g 
             select new { UniqueCount = g.Count() } ); 

在我的真实应用程序中,我得到了更多的子查询,这些子查询基于第一个查询选择的范围。我想我只是增加了一个很大的开销,让DB做出不同的选择。

现在,我简单地在第一个表达式之后调用.ToList()。

所以我的问题是,当查询构建器构建表达式树时,它组合了不同的IQueryable,这是正确的吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-10-03 02:47:07

是的,你是对的。LINQ表达式在您计算它们的时候就会延迟计算(例如,通过.ToList() )。此时,实体框架将查看整个查询并构建一条SQL语句来表示它。

在这种情况下,更明智的做法可能是对第一个查询执行而不是 evaluate,因为SQL数据库针对执行基于集合的操作进行了优化,比如分组和计数。不必强制数据库通过网络发送所有Test对象,将结果反序列化为内存中的对象,然后在本地执行分组和计数,通过让SQL数据库只返回结果计数,您可能会看到更好的性能。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12696276

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档