DataTable删除重复数据

方法一: 

   //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

在C#中,使用`DataTable`对象去除基于特定列的重复数据是一个常见的需求。可以通过`DataTable`的`Compute`方法或者创建一个新的`DataTable`来实现。以下是基于特定列去除重复数据的一种方法: 1. 使用`DataTable`的`DefaultView`属性和`RowFilter`属性,结合`Unique`标志来过滤掉重复行。这种方法适用于单个列去重。 ```csharp DataTable dt = new DataTable(); // 假设dt已经填充了数据 // 获取特定列的列名 string columnName = "需要去重的列名"; // 使用RowFilter属性过滤重复DataTable uniqueTable = dt.DefaultView.ToTable(true, columnName); // uniqueTable 现在包含了去除重复数据DataTable ``` 2. 如果需要根据多个列进行去重,可以在`RowFilter`中指定多个列名,并在`Compute`方法中使用`Group By`语句。 ```csharp DataTable dt = new DataTable(); // 假设dt已经填充了数据 // 获取需要去重的列名数组 string[] columnNames = new string[] { "第一列名", "第二列名" }; // 构建Group By语句 string groupByStatement = string.Join(", ", columnNames); // 使用Compute方法进行分组去重 DataTable uniqueTable = dt.Compute("count(" + columnName + ")", "Group By " + groupByStatement); // uniqueTable 现在包含了去除重复数据DataTable ``` 需要注意的是,使用`Compute`方法时,需要确保分组列中至少有一列是可以进行计数操作的列(例如,存在非空或可计数的列),否则可能会导致结果不正确。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值