今天在使用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));

查询结果:

 

重点:

String.Join 方法

连接指定数组的元素或集合的成员,在每个元素或成员之间使用指定的分隔符。

String.Join 方法 重载

载此成员。有关此成员的完整信息(包括语法、用法和示例),请单击重载列表中的相应名称。

 名称说明
公共方法 静态成员 受 Silverlight for Windows Phone 支持 Join(String, IEnumerable<String>) 串联类型为 StringIEnumerable<T> 构造集合的成员,其中在每个成员之间使用指定的分隔符。
公共方法 静态成员 受 Silverlight for Windows Phone 支持 Join<T>(String, IEnumerable<T>) 串联字符串集合的成员,其中在每个成员之间使用指定的分隔符。
公共方法 静态成员 受 Silverlight for Windows Phone 支持 Join(String, Object[]) 串联对象数组的各个元素,其中在每个元素之间使用指定的分隔符。
公共方法 静态成员 受 Silverlight for Windows Phone 支持 受 Xbox 360 支持 Join(String, String[]) 在指定 String 数组的每个元素之间连接指定的分隔符 String,从而产生单个连接的字符串。
公共方法 静态成员 受 Silverlight for Windows Phone 支持 受 Xbox 360 支持 Join(String, String[], Int32, Int32) 在指定 String 数组的每个元素之间连接指定的分隔符 String,从而产生单个连接的字符串。 参数指定要使用的第一个数组元素和元素数。

 

posted on 2012-09-26 22:57  天之饺子  阅读(35647)  评论(2编辑  收藏  举报