Linq 求和汇总

健者天行 2016-08-10 09:42:10
下面是我分组时候的求和, 现在我想不要分组,仅求于 Qty1 ~ Qty 15,
请教 Linq 如何写???


var q = from p in dtQtyDetail.AsEnumerable() //Linq Group By 求和汇总
group p by new
{
ColorID = p.Field<string>("ColorID"),
VampMaterial = p.Field<string>("VampMaterial"),
} into g
select new
{
ColorID = g.Key.ColorID,
VampMaterial = g.Key.VampMaterial,
Qty1 = g.Sum(p => p.Field<Int16>("Qty1")),
Qty2 = g.Sum(p => p.Field<Int16>("Qty2")),
Qty3 = g.Sum(p => p.Field<Int16>("Qty3")),
Qty4 = g.Sum(p => p.Field<Int16>("Qty4")),
Qty5 = g.Sum(p => p.Field<Int16>("Qty5")),
Qty6 = g.Sum(p => p.Field<Int16>("Qty6")),
Qty7 = g.Sum(p => p.Field<Int16>("Qty7")),
Qty8 = g.Sum(p => p.Field<Int16>("Qty8")),
Qty9 = g.Sum(p => p.Field<Int16>("Qty9")),
Qty10 = g.Sum(p => p.Field<Int16>("Qty10")),
Qty11 = g.Sum(p => p.Field<Int16>("Qty11")),
Qty12 = g.Sum(p => p.Field<Int16>("Qty12")),
Qty13 = g.Sum(p => p.Field<Int16>("Qty13")),
Qty14 = g.Sum(p => p.Field<Int16>("Qty14")),
Qty15 = g.Sum(p => p.Field<Int16>("Qty15")),
TotalQty = g.Sum(p => p.Field<Int32>("TotalQty"))
};



相当于 SQL:
select
SUM(Qty1)[Qty1],SUM(Qty2)[Qty2],SUM(Qty3)[Qty3],........
from 表


不分组 求和多列
...全文
667 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
健者天行 2016-08-25
  • 打赏
  • 举报
回复
引用 12 楼 From_TaiWan 的回复:
啊,我还在给你研究呢,结了!
不好意思了,结贴效率高了点, 最后代码中,我又改成你说的这种 list.Sum() 方法了。
threenewbee 2016-08-12
  • 打赏
  • 举报
回复
引用 8 楼 q107770540 的回复:
    var q = from p in dtQtyDetail.AsEnumerable()        
                        group p 1 into g
                        select new
                        { 
                            Qty1 = g.Sum(p => p.Field<Int16>("Qty1")),
                            Qty2 = g.Sum(p => p.Field<Int16>("Qty2")),
                            Qty3 = g.Sum(p => p.Field<Int16>("Qty3"))
                        };
finally you still using a "fake" group by :)
对啊,还是得用groupby
健者天行 2016-08-11
  • 打赏
  • 举报
回复
引用 3 楼 caozhy 的回复:
select new这个匿名对象是编译产生的,如果你不打算用codedom或者emit的话,只能硬写
Linq 能分组求和, 不太可能 不分组了就求和不了了,只是我不知道怎么写。
健者天行 2016-08-11
  • 打赏
  • 举报
回复
应该是很简单的,
引用 2 楼 From_TaiWan 的回复:
group by本来就是Linq的东西,不用这个,估计很难 或者可以放到datatable处理
就是不用再分组了,直接 求和即可。 相当于 SQL: select SUM(Qty1)[Qty1],SUM(Qty2)[Qty2],SUM(Qty3)[Qty3],........ from 表
threenewbee 2016-08-11
  • 打赏
  • 举报
回复
select new这个匿名对象是编译产生的,如果你不打算用codedom或者emit的话,只能硬写
秋的红果实 2016-08-11
  • 打赏
  • 举报
回复
啊,我还在给你研究呢,结了!
秋的红果实 2016-08-11
  • 打赏
  • 举报
回复
var list=dtQtyDetail.AsEnumerable() ; var query2 = from p in list select new { Qty1 = list.Sum(i => i.Field("Qty1")) //…… }; 这样出来的是list.count个结果 为什么不直接用list.Sum()呢,避开linq
健者天行 2016-08-11
  • 打赏
  • 举报
回复
问题解决, 谢谢各位。
秋的红果实 2016-08-11
  • 打赏
  • 举报
回复
var q = from p in dtQtyDetail.AsEnumerable() //Linq Group By 求和汇总 group p by “A” into g select new { ColorID = g.Key.ColorID, VampMaterial = g.Key.VampMaterial, Qty1 = g.Sum(p => p.Field<Int16>("Qty1")), Qty2 = g.Sum(p => p.Field<Int16>("Qty2")) //…… }; 分组依据放一个常量,这个组就是整个表本身,这样就是整个表Qty1、Qty2、Qty3……字段的总和了
q107770540 2016-08-11
  • 打赏
  • 举报
回复
    var q = from p in dtQtyDetail.AsEnumerable()        
                        group p 1 into g
                        select new
                        { 
                            Qty1 = g.Sum(p => p.Field<Int16>("Qty1")),
                            Qty2 = g.Sum(p => p.Field<Int16>("Qty2")),
                            Qty3 = g.Sum(p => p.Field<Int16>("Qty3"))
                        };
finally you still using a "fake" group by :)
threenewbee 2016-08-11
  • 打赏
  • 举报
回复
引用 5 楼 leo2003 的回复:
[quote=引用 3 楼 caozhy 的回复:] select new这个匿名对象是编译产生的,如果你不打算用codedom或者emit的话,只能硬写
Linq 能分组求和, 不太可能 不分组了就求和不了了,只是我不知道怎么写。[/quote] 分组和求和有什么关系,不分组也能求和。
健者天行 2016-08-11
  • 打赏
  • 举报
回复
@兔子党-督察
秋的红果实 2016-08-10
  • 打赏
  • 举报
回复
group by本来就是Linq的东西,不用这个,估计很难 或者可以放到datatable处理
健者天行 2016-08-10
  • 打赏
  • 举报
回复
Linq 不分组 多列 求和

110,537

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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