Linq分组(groupby)求和(sum)并且按照分隔符(join)分
割列数据
今天在使⽤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();
groupby分组
query.ToList().ForEach(p => tbl.Rows.Add(p.pingming, p.guige,p.biaohao,p.shuliang));
查询结果:
重点:
String.Join ⽅法
连接指定数组的元素或集合的成员,在每个元素或成员之间使⽤指定的分隔符。
String.Join ⽅法重载
载此成员。有关此成员的完整信息(包括语法、⽤法和⽰例),请单击重载列表中的相应名称。
说明
串联类型为 String 的 IEnumerable<T> 构造集合的成员,其中在每个成员之间使⽤指定
的分隔符。
串联字符串集合的成员,其中在每个成员之间使⽤指定的分隔符。
串联对象数组的各个元素,其中在每个元素之间使⽤指定的分隔符。
在指定 String 数组的每个元素之间连接指定的分隔符 String,从⽽产⽣单个连接的字符
串。
在指定 String 数组的每个元素之间连接指定的分隔符 String,从⽽产⽣单个连接的字符
串。参数指定要使⽤的第⼀个数组元素和元素数。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。