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-08-24 01:08:57

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

Linq DataTable Group By 分组显示人员明细

原始数据: 分组后的输出结果: 源代码: 1 public static void PrintPersons() 2 { 3 //准备数据 4 DataTable dt = new DataTable(); 5 dt.Columns.Add(new DataColumn("ID", typeof(int))); 6 dt.Columns.Add(new DataColumn("UserName", typeof(string))); 7 dt.Columns.Add

linq中group by

本文导读:LINQ定义了大约40个查询操作符,如select.from.in.where.group 以及order by,借助于LINQ技术,我们可以使用一种类似SQL的语法来查询任何形式的数据.Linq有很多值得学习的地方,这里我们主要介绍Linq使用Group By. 一.Linq对谁适用 linq的语法通过System.Linq下面的Enumerable类提供支持,通过观察他的签名,你就会发现他为IEnumerable<T>实现了一系列的扩展方法,也就是说,只要是实现了IEnumera

Linq使用Group By 1

Linq使用Group By 1 1.简单形式: var q = from p in db.Products group p by p.CategoryID into g select g; 语句描述:Linq使用Group By按CategoryID划分产品. 说明:from p in db.Products 表示从表中将产品对象取出来.group p by p.CategoryID into g表示对p按CategoryID字段归类.其结果命名为g,一旦重新命名,p的作用域就结束了,所以,最

第17课-数据库开发及ado.net 聚合函数,模糊查询like,通配符.空值处理.order by排序.分组group by-having.类型转换-cast,Convert.union all; Select 列 into 新表;字符串函数;日期函数

第17课-数据库开发及ado.net 聚合函数,模糊查询like,通配符.空值处理.order by排序.分组group by-having.类型转换-cast,Convert.union all;  Select 列 into 新表;字符串函数;日期函数 SQL聚合函数 MAX(最大值).MIN(最小值).AVG(平均值).SUM(和).COUNT(数量:记录的条数) 聚合函数对null不计算.如果一行数据都是null,count(*)包含对空值行.重复行的统计. --聚合函数演示 selec

mysql数据库中group by和sum一起使用语句的简单介绍

一.SUM 用以求和.ps,所有的人的总数和. 二.sum和group by一起使用 如果需要查询的是男生和女生的各自的总年龄怎么查呢?做法为:把人按性别来分组,然后用SUM函数来求和 CREATE TABLE test_table ( NAME VARCHAR(50) COMMENT '姓名', age INT COMMENT '年龄', sex TINYINT COMMENT '性别' );

sql分别用日期、月、年 分组 group by 分组,datepart函数

标签: datepart函数sql分别用日期月年 分组group by 分组 2013-12-26 15:31 20764人阅读 评论(1) 收藏 举报 分类: SQL Server(21) 版权声明:本文为博主原创文章,未经博主允许不得转载. [sql] view plain copy --以2013-12-10 12:56:55为例 --convert(nvarchar(10),CreateDate,120) => 2013-12-10 --DATEPART(month,CreateDate

LINQ学习——Group

一.Group的作用 1.Group字句把select的对象根据一些标准进行分组. 2.从查询表达式返回的对象是从查询中枚举分组结果的可枚举类型. 3.每一个分组由一个叫做键的字段区分. 4.每一个分组本身是可枚举类型并可以枚举它的项. 二.LINQ表达式 Group object by field       实例:Student.cs 1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 usin

Linq使用Group By经验总结

学习Linq时,经常会遇到Linq使用Group By问题,这里将介绍Linq使用Group By问题的解决方法. 1.计数 var q = from p in db.Products group p by p.CategoryID into g select new { g.Key, NumProducts = g.Count() }; 语句描述:Linq使用Group By和Count得到每个CategoryID中产品的数量. 说明:先按CategoryID归类,取出CategoryID值和

Linq分组功能

Linq在集合操作上很方便,很多语法都借鉴自sql,但linq的分组却与sql有一定的区别,故整理发布如下. 1.  Linq分组 分组后以Key属性访问分组键值. 每一组为一个IEnumberAble或IQeuryAble的集合,可以继续枚举. Sample: string[] World = { "Hello","World"}; string[] Brother = { "Hello","Brother"}; var r