C# DataTable 去某几个字段相等的重复行,給入需要做叠加的字段名做数值叠加
程序员文章站
2022-03-26 09:11:18
以下代码实现c 语言DataTable去某几个字段的重复行, 数值的叠加 filedNames : 去重字段名 数组 superFileds: 叠加字段名 数组 /// /// 去重复并且叠加需要叠加的字段 /// /// /// /// public static DataTable Distin ......
以下代码实现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; }