C# DataTable 去某幾個欄位相等的重複行,給入需要做疊加的欄位名做數值疊加
阿新 • • 發佈:2018-12-06
以下程式碼實現c#語言DataTable去某幾個欄位的重複行, 數值的疊加
filedNames : 去重欄位名 陣列
superFileds: 疊加欄位名 陣列
/// <summary> /// 去重複並且疊加需要疊加的欄位 /// </summary> /// <param name="dt"></param> /// <param name="filedNames"></param> /// <returns></returns> public static DataTable DistinctSomeColumn (DataTable dt, string[] filedNames, string[] superFileds) { DataTable newDt = dt.Copy(); string[] tArr = new string[filedNames.Length]; for (int i = 0 ; i < dt.Rows.Count ; i++) { for (int k = 0 ; k < filedNames.Length ; k++) { tArr[k] = dt.Rows[i][filedNames[k]].ToString(); } string[] tempArr = new string[filedNames.Length]; for (int p = 0 ; p < newDt.Rows.Count && p != i ; p++) { for (int k = 0 ; k < filedNames.Length ; k++) { tempArr[k] = newDt.Rows[p][filedNames[k]].ToString(); } bool flag = true; for (int k = 0 ; k < filedNames.Length ; k++) { if (!tArr[k].Equals(tempArr[k])) { flag = false; break; } } if (flag) { // 傳入的引數每一項都相等, 而後疊加需要疊加的欄位,而後保留疊加過後的一行 float[] fArr = new float[superFileds.Length]; for (int k = 0 ; k < superFileds.Length ; k++) { // 疊加的欄位 newDt.Rows[p][superFileds[k]] = (float.Parse(dt.Rows[i][superFileds[k]].ToString() == "" ? "0" : dt.Rows[i][superFileds[k]].ToString()) + float.Parse(newDt.Rows[p][superFileds[k]].ToString() == "" ? "0" : dt.Rows[p][superFileds[k]].ToString())).ToString("0.0000"); } dt.Rows.RemoveAt(i); i--; } } } return newDt; }