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

lw_881020 2012-09-10 01:53:37
2个都是在执行 int use = .....这句的时候慢。
数据有最大有几百万条,但是现在blists里只有几万条的数据,查询速度就很慢了。这个有办法优化吗?
下面2种写法有没有区别?如果有那个执行效率较好(不考虑别的,只考虑得到use的结果)

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;
...全文
245 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
风一样的大叔 2012-09-12
  • 打赏
  • 举报
回复
在sql中看看有没有什么比较好的优化方法
myhope88 2012-09-11
  • 打赏
  • 举报
回复
换种方式,这样非延迟,太慢了
threenewbee 2012-09-11
  • 打赏
  • 举报
回复
如果是linq to objects,可以试试plinq(并行linq)。
g4_magicvr 2012-09-11
  • 打赏
  • 举报
回复
一般这种比较暴力的玩意不是用查询来解决的
搞个专门的记录来记吧……
没插一条数据 顺便更新一下那条记录(用触发器还是逻辑代码里面的事件随你高兴)
用的时候直接读那条数据
踏雪听雨 2012-09-10
  • 打赏
  • 举报
回复
优化数据库吧
q107770540 2012-09-10
  • 打赏
  • 举报
回复
没什么区别,
你两种方法都使用了 Sum 等类似这样的非延迟查询操作符
会导致查询立即执行去操作内存中的数据

62,050

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧