Linq 分组(group by)求和(sum)并且按照分隔符(join)分割列数据

转载:http://www.cnblogs.com/zq281660880/archive/2012/09/26/2704836.html

今天在使用linq处理一下需求时碰到一点小问题,特此记录。

  需求:

    按照品名相同的进行汇总,数量相加、表号按分号分割显示

 

1、组织测试数据表

 DataTable tableA1 = new DataTable();
            tableA1.Columns.AddRange(new DataColumn[] { new DataColumn("品名"), new DataColumn("规格"), new DataColumn("表号"),new DataColumn("数量") });
            tableA1.Rows.Add(new object[] { "螺旋式", "LS-X", "111","2" });
            tableA1.Rows.Add(new object[] { "螺旋式", "LS-X", "222","1" });
            tableA1.Rows.Add(new object[] { "指针式", "LX-3", "523","2" });
            tableA1.Rows.Add(new object[] { "其他式", "L-1", "666", "2" });
            tableA1.Rows.Add(new object[] { "其他式", "L-1", "456", "1" });
            tableA1.Rows.Add(new object[] { "其他式", "L-1", "990", "2" });

 

2、使用linq 进行查询处理

 var query = from c  in t.AsEnumerable()
                        group c by new {
                            pingming = c.Field<string>("品名"),
                            guige = c.Field<string>("规格")
                                        }
                            into s
                            select new
                            {
                                pingming = s.Select(p => p.Field<string>("品名")).First(),
                                shuliang = s.Sum(p => Convert.ToInt32(p.Field<string>("数量"))),
                                guige = s.Select(p => p.Field<string>("规格")).First(),
                                biaohao = string.Join(";",s.Select(p => p.Field<string>("表号")))
                            };

             DataTable tbl = tableA1.Clone();
             query.ToList().ForEach(p => tbl.Rows.Add(p.pingming, p.guige,p.biaohao,p.shuliang));

查询结果:

 

时间: 2024-07-31 13:44:23

Linq 分组(group by)求和(sum)并且按照分隔符(join)分割列数据的相关文章

mysql 分组group by排序取每条记录中,时间最大的一条记录

mysql 分组 group by, 排序 取每条记录中,时间最大的一条记录 以下是 test 表,测试sql CREATE TABLE IF NOT EXISTS `test` ( `id` int(10) unsigned NOT NULL auto_increment, `install` int(10) unsigned NOT NULL, `day` int(10) unsigned NOT NULL, `aid` int(10) unsigned NOT NULL, PRIMARY

mysql 分组 group by, 排序 取每条记录中,时间最大的一条记录

mysql教程 分组 group by, 排序 取每条记录中,时间最大的一条记录 select a.* from test a, (select aid, max(day) max_day from test group by aid) b where a.aid = b.aid and a.day = b.max_day order by a.install desc 以下是 test 表,测试sql create table if not exists `test` ( `id` int(1

HybridDB PostgreSQL &quot;Sort、Group、distinct 聚合、JOIN&quot; 不惧怕数据倾斜的黑科技和原理 - 多阶段聚合

标签 PostgreSQL , Greenplum , JOIN , group by , distinct , 聚合 , 非分布键 , 数据倾斜 , 多阶段聚合 背景 对于分布式系统,数据分布存储,例如随机.哈希分布. Greenplum数据库支持两种数据分布模式: 1.哈希(指定单个.或多个字段) 2.随机分布(无需指定任何字段) 数据分布存储后,面临一些挑战: JOIN,排序,group by,distinct. 1.JOIN涉及非分布键字段 2.排序,如何保证输出顺序全局有序 3.gro

LINQ 分组问题

问题描述 A表AIDName1张三2李四B表BIDMoneyAID121231342查询的结果AIDNameSumMoneyCount1张三522李四41就是以AID分组,查询钱的总数,跟合计的数量 解决方案 解决方案二:--测试数据准备:CREATETABLE_A(AIDint,Namenvarchar(50))CREATETABLE_B(BIDint,Moneyint,AIDint)insertinto_ASELECT1,'zhangsan'unionSELECT2,'lisi'insert

SSRS:使用分组 Group 属性实现基于父子递归关系的汇总报表

基于父子关系的递归结构在公司组织结构里比较常见,基本上都是在一张表里实现的自引用关系.在 报表中如果要实现这种效果,并且在这个基础上做一些数据的汇总,可以使用到下面提到的方法. 要实现的效果大致如下 - 半收起的效果 -

C#用LINQ语句操作Listview列数据

问题描述 就是我有个listviw,里面列都是数字,例如我有个列,列名叫号码,号码175625918123我现在要想用LINQ去计算这个号码列的所有数据,去计算这里重复的号码,重复了几次.比如2,在这些行里面有重复2次等等,不知道怎么操作,求高手 解决方案 解决方案二:varquery=list.GroupBy(l=>l).Select(l=>new{g.Key,Cont=l.Count()};解决方案三:还是不懂你上面的list是什么意思解决方案四:是listview里的item吧list.

ORACLE先分组后排序,取出没一类的头几条数据

  --先根据A进行分组,再在组内根据B进行排序.rn<3取出每一类的头三条数据 SELECT * FROM (SELECT T.B, T.A, ROW_NUMBER() OVER(PARTITION BY T.A ORDER BY T.B DESC) RN FROM DUAL T) WHERE RN <= 3;

WPS表格中为行或列数据进行求和的技巧

  相信大家在制作表格的时候,都会遇到要把表格中的数据进行总和计算,WPS表格向用户提供了公式计算的功能,而求和就是其中之一.下面小编就为大家介绍下WPS表格中怎样快速就和. 框选A.B.C.D四格,选好后,用鼠标光标找到工具栏的求和按钮"∑",按一下和就出现在D格内了.这是行里求和,同样,在列里求和也按此法操作:框选1,2,3,4,--最终留一个空格,按求和按钮就会得出结果的. 求和 补充:在你框选的时候,在表格内的状态栏(最底行内)就会有你框选范围的"总和"的提

Excel教程 怎样实现隔多列数据求和

今天的教程正好解决上面的问题,如果你想知道该怎么做,那么请看下面的具体操作过程吧: ①首先启动Excel2007,打开含有数据的表格,一年之中十二个月的数据情况,我们要隔2列进行求和,例如三.六.九.十二,说起求和,函数公式必不可少,我们不要怕这些,在M2单元格输入下图中的公式,进行隔2列求和. ②输入完毕,回车得到结果223,双击该单元格右下角的填充柄,自动将余下的数据计算出来. ③下面,我们来验证一下函数公式计算的对不对,将第9行三.六.九.十二4个月份的数据以黄色颜色,按住Ctrl键选中,