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 表


不分组 求和多列
...全文
688 14 打赏 收藏 转发到动态 举报
AI 作业
写回复
用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 不分组 多列 求和
目录 1 LINQ查询结果集 1 2 System.Array 数组 1 2.1 基于System.Array定义数组 1 2.2 基于类型定义数组 1 2.3 数组元素的清空 1 2.4 System.Array类静态成员 1 2.5 不用循环填充数组 1 2.6 数组类实例成员 2 3 System.Collections 集合 2 3.1 ArrayList 2 3.1.1 实例成员 2 3.1.2 静态成员 2 3.2 List 3 3.3 Hashtable 6 3.4 SortedList 6 3.5 SortedList 7 3.6 Queue 8 3.7 Stack 8 3.8 LinkedList 8 3.9 HashSet 9 4 System.Linq 10 4.1 System.Linq.Enumerable 10 4.2 System.Linq.Queryable 10 4.3 System.Linq.Lookup 10 4.4 System.Linq.Expressions.Expression 10 5 接口 10 5.1 IEnumerable 、IEnumerator 10 5.1.1 正常使用 10 5.1.2 C#的 yield 12 5.2 IEnumerable 12 5.3 IEnumerator 12 5.4 ICollection 12 5.5 ICollection 13 5.6 IList 13 5.7 IList 13 5.8 IEqualityComparer 13 5.9 IEqualityComparer 13 5.10 IDictionary 13 5.11 IDictionary 13 5.12 IDictionaryEnumerator 13 5.13 IComparer 13 5.13.1 接口方法说明 int Compare(object x, object y) 13 5.13.2 ArrayList.Sort (IComparer) 方法 13 5.14 IComparer 14 5.14.1 接口方法override int Compare(T x, T y)说明 14 5.14.2 List.Sort (IComparer) 方法 14 5.15 System.Linq.IGrouping 14 5.16 System.Linq.ILookup 14 5.17 System.Linq.IOrderedEnumerable 14 5.18 System.Linq.IOrderedQueryable 14 5.19 System.Linq.IOrderedQueryable 15 5.20 System.Linq.IQueryable 15 5.21 System.Linq.IQueryable 15 5.22 System.Linq.IQueryProvider 15 6 集合扩展方法 15 6.1 集合扩展方法的实现:一个Where的例子 15 6.2 延迟类 15 6.2.1 Select 选择 16 6.2.2 SelectMany 选择 16 6.2.3 Where 条件 16 6.2.4 OrderBy 排序升 17 6.2.5 OrderByDescending 排序降 17 6.2.6 GroupBy 分组 17 6.2.7 Join 联合查询 18 6.2.8 GroupJoin 18 6.2.9 Take 获取集合的前n个元素 19 6.2.10 Skip 跳过集合的前n个元素 19 6.2.11 Distinct 过滤集合中的相同项 19 6.2.12 Union 连接不同集合,自动过滤相同项 19 6.2.13 Concat 连接不同集合,不会自动过滤相同项 19 6.2.14 Intersect 获取不同集合的相同项(交集) 20 6.2.15 Except 从某集合中删除其与另一个集合中相同的项 20 6.2.16 Reverse 反转集合 20 6.2.17 TakeWhile 条件第一次不成立就跳出循环 20 6.2.18 SkipWhile 条件第一次不成立就失效,将后面的数据全取 20 6.2.19 Cast 将集合转换为强类型集合 21 6.2.20 OfType 过滤集合中的指定类型 21 6.3 不延迟(浅复本) 21 6.3.1 Single 集合中符合条件的唯一元素,浅复本 21 6.3.2 SingleOrDefault 集合中符合条件的唯一元素(没有则返回类型默认值),浅复本 21 6.3.3 First 集合的第一个元素,浅复本 21 6.3.4 FirstOrDefault 集合中的第一个元素(没有则返回类型默认值),浅复本 22 6.3.5 Last 集合中的最后一个元素,浅复本 22 6.3.6 LastOrDefault 集合中的最后一个元素(没有则返回类型默认值),浅复本 22 6.3.7 ElementAt 集合中指定索引的元素,浅复本 22 6.3.8 ElementAtOrDefault 集合中指定索引的元素(没有则返回类型默认值),浅复本 22 6.3.9 Contains 判断集合中是否包含有某一元素 22 6.3.10 Any 判断集合中是否有元素满足某一条件 22 6.3.11 All 判断集合中是否所有元素都满足某一条件 23 6.3.12 SequenceEqual 判断两个集合内容是否相同 23 6.3.13 Count 、LongCount集合中的元素个数 23 6.3.14 Average 、Sum集合平均值求和 23 6.3.15 Max、Min 集合最大值,最小值 24 6.3.16 Aggregate 根据输入的表达式获取一个聚合值 24 6.3.17 DefaultIfEmpty 查询结果为空则返回默认值,浅复本 24 6.3.18 ToArray 将集合转换为数组,浅复本 24 6.3.19 ToList 将集合转换为List集合,浅复本 25 6.3.20 ToDictionary 将集合转换为集合,浅复本 25 7 Lambda表达式 25 7.1 例1(比效) 25 7.2 例2(多参) 27 7.3 例3(list.Where) 27 7.4 Lambda表达式中Lifting 28 8 QuerySyntax 查询语法 29 8.1 from in select 30 8.2 orderby 排序 30 8.3 group by into 分组 31 8.4 join in on equals 联合查询 33 8.5 into 汇总 33 9 DataSource 数据绑定 34

111,097

社区成员

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

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

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