今天在使用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 方法 重載
載此成員。有關此成員的完整信息(包括語法、用法和示例),請單擊重載列表中的相應名稱。
名稱 | 說明 | |
---|---|---|
![]() ![]() ![]() |
Join(String, IEnumerable<String>) | 串聯類型為 String 的 IEnumerable<T> 構造集合的成員,其中在每個成員之間使用指定的分隔符。 |
![]() ![]() ![]() |
Join<T>(String, IEnumerable<T>) | 串聯字符串集合的成員,其中在每個成員之間使用指定的分隔符。 |
![]() ![]() ![]() |
Join(String, Object[]) | 串聯對象數組的各個元素,其中在每個元素之間使用指定的分隔符。 |
![]() ![]() ![]() ![]() |
Join(String, String[]) | 在指定 String 數組的每個元素之間連接指定的分隔符 String,從而產生單個連接的字符串。 |
![]() ![]() ![]() ![]() |
Join(String, String[], Int32, Int32) | 在指定 String 數組的每個元素之間連接指定的分隔符 String,從而產生單個連接的字符串。 參數指定要使用的第一個數組元素和元素數。 |