DataTable删除重复数据

来源:互联网 发布:网络arp检测工具 编辑:程序博客网 时间:2024/05/22 04:47

方法一: 

   //dt为需要转换的表
    //PrimaryKeyColumns为dt中欲不含重复行值的列名
    public DataTable GetDistinctPrimaryKeyColumnTable(DataTable dt, string[] PrimaryKeyColumns)
    {
        DataView dv = dt.DefaultView;
        DataTable dtDistinct = dv.ToTable(true, PrimaryKeyColumns);

        return dtDistinct;
    }

 

调用:(例)

DataTable dt = GetDistinctPrimaryKeyColumnTable(dt_User, new string[] { "name", "sex"});

 

注:此方法是必须name和sex都相同的才删除

 

 

方法二:

/// <summary>  
        /// 删除数据表中重复的数据  
        /// </summary>  
        /// <param name="dt">数据集</param>  
        /// <param name="columNum">用来判断的主键列</param>  
        /// <returns></returns>  
        private DataTable DelRepeat(DataTable dt, string columNum) 
        { 
            //用来存储主键列的数据  
            ArrayList checkList = new ArrayList(); 
            //定义一个新的数据表  
            DataTable tempDt = new DataTable(); 
 
            //源数据表里的列数  
            int columCount = dt.Columns.Count; 
 
            //将新的数据表的架构跟源数据表配置一致  
            //for (int i = 0; i < columCount; i++) 
            //{ 
            //    tempDt.Columns.Add(new DataColumn("" + i + "")); 
            //}
            tempDt.Columns.Add(new DataColumn("name"));
            tempDt.Columns.Add(new DataColumn("sex"));
            tempDt.Columns.Add(new DataColumn("address")); 
            //tempDt.Rows.Count = count;  
            if (dt.Rows.Count > 0) 
           { 
                //将主键列填装到arraylist里  
                foreach (DataRow dr in dt.Rows) 
                { 
                    //除去重复的数据  
                    if (!checkList.Contains(dr[columNum].ToString())) 
                    { 
                        checkList.Add(dr[columNum].ToString()); 
                    } 
                } 
                //用主键列的数据循环判断  
                foreach (string str in checkList) 
                { 
                    int num = 0; 
 
                     
                    //用源数据表里主键列数据跟arraylist里数据匹对  
                    foreach (DataRow dr in dt.Rows) 
                    { 
                         
                       if (str.ToString() == dr[columNum].ToString()) 
                        { 
                            //第一次填充tempDt  
                            if (num == 0) 
                            { 
                                DataRow temDr = tempDt.NewRow(); 
                                temDr = dr; 
                                tempDt.Rows.Add(temDr.ItemArray); 
                            } 
                            num++; 
                        } 
                    } 
               } 
            } 
            return tempDt; 
        } 

 

调用:(例)

tblDatas= DelRepeat(tblDatas, "name"); 

注:此方法是根据指定的字段相同的来删除,不管其他的相同不,如这里的name

0 0
原创粉丝点击