当前位置: 移动技术网 > IT编程>开发语言>.net > C# DataTable 去某几个字段相等的重复行,給入需要做叠加的字段名做数值叠加

C# DataTable 去某几个字段相等的重复行,給入需要做叠加的字段名做数值叠加

2018年10月16日  | 移动技术网IT编程  | 我要评论
以下代码实现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;

    }

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网