欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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;

    }