首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

Linq分组查询,其后求某列的和

2012-09-22 
Linq分组查询,然后求某列的和2个都是在执行 int use .....这句的时候慢。数据有最大有几百万条,但是现在b

Linq分组查询,然后求某列的和
2个都是在执行 int use = .....这句的时候慢。
数据有最大有几百万条,但是现在blists里只有几万条的数据,查询速度就很慢了。这个有办法优化吗?
下面2种写法有没有区别?如果有那个执行效率较好(不考虑别的,只考虑得到use的结果)

C# code
var blist = from p in blists                    group p by new { p.roleid,p.oper_type} into g                    select new { g.Key.oper_type, sum_gold = g.Sum(p => p.gold), sum_coupon = g.Sum(p => p.coupon), sum_copper = g.Sum(p => p.copper) };int use = blist.Where(p => p.oper_type == 1).Sum(p => p.sum_gold);/////////////////////////////////////////////////var blist = from p in blists                    group p by p.oper_type into g                    select new { g.Key, sum_gold = g.Sum(p => p.gold), sum_coupon = g.Sum(p => p.coupon), sum_copper = g.Sum(p => p.copper) };int use = blist.SingleOrDefault(p => p.oper_type == 1).sum_gold;


[解决办法]
没什么区别,
你两种方法都使用了 Sum 等类似这样的非延迟查询操作符
会导致查询立即执行去操作内存中的数据
[解决办法]
优化数据库吧
[解决办法]
一般这种比较暴力的玩意不是用查询来解决的
搞个专门的记录来记吧……
没插一条数据 顺便更新一下那条记录(用触发器还是逻辑代码里面的事件随你高兴)
用的时候直接读那条数据
[解决办法]
如果是linq to objects,可以试试plinq(并行linq)。
[解决办法]
换种方式,这样非延迟,太慢了
[解决办法]
在sql中看看有没有什么比较好的优化方法

热点排行