删除DataTable重复列,只针对删除其中的一列重复的行

vs2005针对datatable已经有封装好的去重复方法:

1 //去掉重复行
2 DataView dv = table.DefaultView;
3 table = dv.ToTable(true, new string[] { "name", "code" });
4
5 此时table 就只有name、code无重复的两行了,如果还需要id值则
6
7 table = dv.ToTable(true, new string[] { "id","name", "code" });//第一个参数true 启用去重复,类似distinct

如果有一组数据(id不是唯一字段)

id   name   code

1    张三    123

2    李四    456

3    张三    456

1   张三     123

通过上面的方法得到

 id   name   code

1    张三    123

2    李四    456

3    张三    456

去重复去掉的仅仅是 id name code完全重复的行,如果想要筛选的数据仅仅是name不允许重复呢?

table = dv.ToTable(true, new string[] { "name"});

得到:

name 

张三  

李四  

但是我想要的结果是只针对其中的一列name列 去重复,还要显示其他的列

需要的结果是:

 id   name   code

1    张三    123

2    李四    456

这个该怎么实现?下面的方法就可以,也许有更好的方法,希望大家多多指教

 1  #region 删除DataTable重复列,类似distinct
 2         /// <summary>
 3         /// 删除DataTable重复列,类似distinct
 4         /// </summary>
 5         /// <param name="dt">DataTable</param>
 6         /// <param name="Field">字段名</param>
 7         /// <returns></returns>
 8         public static DataTable DeleteSameRow(DataTable dt, string Field)
 9         {
10             ArrayList indexList = new ArrayList();
11             // 找出待删除的行索引
12             for (int i = 0; i < dt.Rows.Count - 1; i++)
13             {
14                 if (!IsContain(indexList, i))
15                 {
16                     for (int j = i + 1; j < dt.Rows.Count; j++)
17                     {
18                         if (dt.Rows[i][Field].ToString() == dt.Rows[j][Field].ToString())
19                         {
20                             indexList.Add(j);
21                         }
22                     }
23                 }
24             }
25             indexList.Sort(); // 排序
26             for (int i = indexList.Count - 1; i >= 0; i--)// 根据待删除索引列表删除行 
27             {
28                 int index = Convert.ToInt32(indexList[i]);
29                 dt.Rows.RemoveAt(index);
30             }
31             return dt;
32         }
33
34         /// <summary>
35         /// 判断数组中是否存在
36         /// </summary>
37         /// <param name="indexList">数组</param>
38         /// <param name="index">索引</param>
39         /// <returns></returns>
40         public static bool IsContain(ArrayList indexList, int index)
41         {
42             for (int i = 0; i < indexList.Count; i++)
43             {
44                 int tempIndex = Convert.ToInt32(indexList[i]);
45                 if (tempIndex == index)
46                 {
47                     return true;
48                 }
49             }
50             return false;
51         }
52         #endregion   

时间: 2024-12-28 21:26:15

删除DataTable重复列,只针对删除其中的一列重复的行的相关文章

如何删除表中的重复记录只保留其中一条?

1.查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断 select * from people where peopleId in (select  peopleId  from  people  group  by  peopleId  having  count(peopleId) > 1) 2.删除表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断,只留有rowid最小的记录 delete from people  where peopleId  

新建一个DataTable(只针对一列)

1 /// <summary> 2 /// 新建一个DataTable(只针对一列) 3 /// </summary> 4 /// <param name="dataStr"></param> 5 /// <param name="titleName"></param> 6 /// <returns></returns> 7 private DataTable NewDa

oracle 删除掉重复数据只保留一条

用SQL语句,删除掉重复项只保留一条 在几千条记录里,存在着些相同的记录,如何能用SQL语句,删除掉重复的呢 1.查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断 select * from people where peopleId in (select peopleId from people group by peopleId having count(peopleId) > 1) 2.删除表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断,只留有

【转】SQL删除重复记录,只保留其中一条

SQL:删除重复数据,只保留一条用SQL语句,删除掉重复项只保留一条在几千条记录里,存在着些相同的记录,如何能用SQL语句,删除掉重复的呢 1.查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断 select * from people where peopleId in (select peopleId from people group by peopleId having count(peopleId) > 1) 2.删除表中多余的重复记录,重复记录是根据单个字段(p

SQL删除重复数据只保留一条

用SQL语句,删除掉重复项只保留一条 在几千条记录里,存在着些相同的记录,如何能用SQL语句,删除掉重复的呢1.查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断 select * from people where peopleId in (select peopleId from people group by peopleId having count(peopleId) > 1) 2.删除表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断,只留有r

MySQL中删除重复数据只保留一条

用SQL语句,删除掉重复项只保留一条 在几千条记录里,存在着些相同的记录,如何能用SQL语句,删除掉重复的呢 1.查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断 SELECT * FROM people WHERE peopleId IN ( SELECT peopleId FROM people GROUP BY peopleId HAVINGcount(peopleId) > 1 ) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 1 2 3

Oralce中SQL删除重复数据只保留一条(转)

用SQL语句,删除掉重复项只保留一条 在几千条记录里,存在着些相同的记录,如何能用SQL语句,删除掉重复的呢 1.查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断 select * from people where peopleId in (select peopleId from people group by peopleId having count(peopleId) > 1) 2.删除表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断,只留有

删除重复数据,只保留ID最小的一条数据

最近遇到一个问题,就是使用的rm_user_department的重复数据过多,需要删除重复数据,在网上找的sql,照着写的基本上运行都有错误,现在将自己写的贴出来给大家看看. rm_user_department 的表结构如图: select * from rm_user_department DELETE FROM rm_user_department --这里不能使用别名,如果使用别名会报错 WHERE ( user_id, dep_id, user_type ) IN ( select

删除datatable的行后,出现“不能通过已删除的行访问该行的信息”的错误,即DeletedRowInaccessibleException

删除datatable的行后,出现"不能通过已删除的行访问该行的信息"的错误 =========================================================== 采用datatable.Rows[i].Delete()删除行后再访问该表时出现出现"不能通过已删除的行访问该行的信息"的错误.原因如下: Delete()之后需要datatable.AccepteChanges()方法确认完全删除,因为Delete()只是将相应列的状态