删除DataTable重复列,只删除其中的一列重复行的解决方法

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


代码如下:

//去掉重复行
 DataView dv = table.DefaultView;
 table = dv.ToTable(true, new string[] { "name", "code" });

此时table 就只有name、code无重复的两行了,如果还需要id值则

table = dv.ToTable(true, new string[] { "id","name", "code" });//第一个参数true 启用去重复,类似distinct

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

代码如下:

id   name   code
    张三    123
    李四    456
    张三    456
   张三     123

通过上面的方法得到

代码如下:

id   name   code
    张三    123
    李四    456
    张三    456

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

代码如下:

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

得到:

代码如下:

name

张三

李四

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

需要的结果是:

代码如下:

id   name   code

1    张三    123

2    李四    456

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

代码如下:

#region 删除DataTable重复列,类似distinct
         /// <summary>  
         /// 删除DataTable重复列,类似distinct  
         /// </summary>  
         /// <param name="dt">DataTable</param>  
         /// <param name="Field">字段名</param>  
         /// <returns></returns>  
         public static DataTable DeleteSameRow(DataTable dt, string Field)
         {
             ArrayList indexList = new ArrayList();
             // 找出待删除的行索引  
             for (int i = 0; i < dt.Rows.Count - 1; i++)
             {
                 if (!IsContain(indexList, i))
                 {
                     for (int j = i + 1; j < dt.Rows.Count; j++)
                     {
                         if (dt.Rows[i][Field].ToString() == dt.Rows[j][Field].ToString())
                         {
                             indexList.Add(j);
                         }
                     }
                 }
             }
             // 根据待删除索引列表删除行  
             for (int i = indexList.Count - 1; i >= 0; i--)
             {
                 int index = Convert.ToInt32(indexList[i]);
                 dt.Rows.RemoveAt(index);
             }
             return dt;
         }

/// <summary>  
         /// 判断数组中是否存在  
         /// </summary>  
         /// <param name="indexList">数组</param>  
         /// <param name="index">索引</param>  
         /// <returns></returns>  
         public static bool IsContain(ArrayList indexList, int index)
         {
             for (int i = 0; i < indexList.Count; i++)
             {
                 int tempIndex = Convert.ToInt32(indexList[i]);
                 if (tempIndex == index)
                 {
                     return true;
                 }
             }
             return false;
         }
         #endregion

(0)

相关推荐

  • 删除Table表中的重复行的方法

    利用SQL Server 2005的新功能NOW_NUMBER和CTE可以很好的实现. 举例说明如下: 建立测试数据: 复制代码 代码如下: create table Dup1 ( Col1 int null, Col2 varchar(20) null ) insert into Dup1 values (1, 'aaa'), (2, 'aaa'), (2, 'aaa'), (2, 'aaa'), (3, 'bbb'), (3, 'bbb'), (4, 'ccc'), (4, 'ddd'),

  • 批处理 删除重复行的代码

    复制代码 代码如下: @echo off :: 删除重复的行,但不能保留空行 :: 对不符合变量命名规则.变量个数超过限制的文本都无法正确处理 :: (echo 清除重复行后的文件内容:& echo.)>str_.txt for /f "delims=" %%i in (test.txt) do ( if not defined %%i set %%i=A & echo %%i>>str_.txt) start str_.txt

  • sql里将重复行数据合并为一行数据使用逗号进行分隔

    一.定义表变量 复制代码 代码如下: DECLARE @T1 table ( UserID int , UserName nvarchar(50), CityName nvarchar(50) ); 复制代码 代码如下: insert into @T1 (UserID,UserName,CityName) values (1,'a','上海') insert into @T1 (UserID,UserName,CityName) values (2,'b','北京') insert into @

  • sqlserver利用存储过程去除重复行的sql语句

    还是先上代码吧 ,可以先看 SQL语句去掉重复记录,获取重复记录 复制代码 代码如下: ALTER procedure [dbo].[PROC_ITEMMASTER_GETUNIQUE] @PAGEINDEX INT,@uid int,@itemnumber varchar(50) AS begin tran --开始事务 drop table [ItemMaster].[dbo].[testim] --删除表 --把不重复记录转存到testim中 select * into [ItemMast

  • 用vbscript实现从文本文件中删除所有重复行的代码

    问: 您好,脚本专家!如何从文本文件中删除所有重复行? -- SW 答: 您好,SW.您知道,成为一名脚本专家便意味着开始永无止境地寻找给定问题的最终解决方案.(或者至少在我们的经理问为什么我们似乎从未真正完成什么时,我们是这么告诉他的:"老板,永无止境的寻找过程需要时间!")这就是为什么我们很高兴看到您的问题的原因.不久前 我们回答了一个关于从文本文件中删除重复名字的类似问题.我们想到的解决方案十分简单而且效果不错:只是我们不确定那是最佳解决方案.现在,很感谢您的问题,我们可以再次尝

  • 分享SQL Server删除重复行的6个方法

    1.如果有ID字段,就是具有唯一性的字段 复制代码 代码如下: delect table where id not in ( select max(id) from table group by col1,col2,col3... ) group by 子句后跟的字段就是你用来判断重复的条件,如只有col1,那么只要col1字段内容相同即表示记录相同. 2. 如果是判断所有字段也可以这样 复制代码 代码如下: select * into #aa from table group by id1,i

  • SQLServe 重复行删除方法

    Microsoft SQL Server 表不应该包含重复行和非唯一主键.为简洁起见,在本文中我们有时称主键为"键"或"PK",但这始终表示"主键".重复的 PK 违反了实体完整性,在关系系统中是不允许的.SQL Server 有各种强制执行实体完整性的机制,包括索引.唯一约束.主键约束和触发器. 尽管如此,在某些情况下还可能会出现重复的主键;如果出现此类情况,就必须清除重复主键.出现重复主键的情形之一是,在 SQL Server 外部的非关系数

  • 删除DataTable重复列,只删除其中的一列重复行的解决方法

    vs2005针对datatable已经有封装好的去重复方法: 复制代码 代码如下: //去掉重复行 DataView dv = table.DefaultView; table = dv.ToTable(true, new string[] { "name", "code" }); 此时table 就只有name.code无重复的两行了,如果还需要id值则 table = dv.ToTable(true, new string[] { "id",

  • MySQL删除外键时报错Error Code:1091. Can‘t DROP ‘XXX‘的解决方法

    解决MySQL删除外键时报错Error Code: 1091. Can't DROP 'XXX'; check that column/key exists 长期不写基础的 MySQL 代码,笔者也开始犯一些低级错误.最近,笔者在尝试将表中某列的外键约束删除时,MySQL 却一直报该列本就不存在的错误. 笔者报错时的运行环境: MySQL 8.0.27 Windows 10 教育版 Error Code: 1091. Can't DROP 'XXX'; check that column/key

  • SQL对冗余数据的删除重复记录只保留单条的说明

    我们先看一下相关数据结构的知识. 在学习线性表的时候,曾有这样一个例题. 已知一个存储整数的顺序表La,试构造顺序表Lb,要求顺序表Lb中只包含顺序表La中所有值不相同的数据元素. 算法思路: 先把顺序表La的第一个元素付给顺序表Lb,然后从顺序表La的第2个元素起,每一个元素与顺序表Lb中的每一个元素进行比较,如果不相同,则把该元素附加到顺序表Lb的末尾. 复制代码 代码如下: public SeqList<int> Purge(SeqList<int> La) { SeqLis

  • mysql数据库删除重复数据只保留一条方法实例

    1.问题引入 假设一个场景,一张用户表,包含3个字段.id,identity_id,name.现在身份证号identity_id和姓名name有很多重复的数据,需要删除只保留一条有效数据. 2.模拟环境 1.登入mysql数据库,创建一个单独的测试数据库mysql_exercise create database mysql_exercise charset utf8; 2.创建用户表users create table users( id int auto_increment primary

  • 解析PHP函数array_flip()在重复数组元素删除中的作用

    我们都知道,PHP中的数组元素删除的方式可以有很多种,经常用到的函数有php中array_unique().那么我们今天为大家介绍的PHP函数array_flip()在删除数组重复元素时的效率要比array_unique()函数高出大约5倍左右.PHP函数array_flip()格式: 复制代码 代码如下: array array_flip ( array trans ) //array_flip -- 交换数组中的键和值 array array_flip ( array trans ) //a

  • C# datatable 不能通过已删除的行访问该行的信息处理方法

    原因如下: Delete()之后需要datatable.AccepteChanges()方法确认完全删除,因为Delete()只是将相应列的状态标志为删除, 还可以通过datatable.RejectChanges()回滚,使该行取消删除. 如果要彻底删除datarow,需要Delete()和AccepteChanges()方法同时使用,或者采用datatable.Rows.RemoveAt(i)方法直接删除, 其中i表示行索引,还有一个就是datatable.Rows.Remove(DataR

  • python查找重复图片并删除(图片去重)

    本文实例为大家分享了python查找重复图片并删除的具体代码,供大家参考,具体内容如下 和网络爬虫配套的,也可单独使用,从网上爬下来的图片重复太多,代码支持识别不同尺寸大小一致的图片,并把重复的图片删除,只保留第一份. # -*- coding: utf-8 -*- import cv2 import numpy as np import os,sys,types def cmpandremove2(path): dirs = os.listdir(path) dirs.sort() if le

  • 教你用Python寻找重复文件并删除的脚本写法

    在实际生活中,经常会有文件重复的困扰,即同一个文件可能既在A目录中,又在B目录中,更可恶的是,即便是同一个文件,文件名可能还不一样.在文件较少的情况下,该类情况还比较容易处理,最不济就是one by one的人工比较——即便如此,也很难保证你的眼神足够犀利.倘若文件很多,这岂不是个impossible mission?最近在看<Python UNIX和Linux系统管理指南>,里面就有有关“数据比较”的内容,在其基础上,结合实际整理如下. 该脚本主要包括以下模块:diskwalk,chechs

  • [js]一个只删除所有font标签的正则函数

    js 求一个只删除所有font 标签的正则函数 var a = "33asfdasdf22asdfasdf"; var b = a.replace(/]*>/gi,""); alert(b); [Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]

  • Mysql删除重复数据保留最小的id 的解决方法

    在网上查找删除重复数据保留id最小的数据,方法如下: DELETE FROM people WHERE peopleName IN ( SELECT peopleName FROM people GROUP BY peopleName HAVING count(peopleName) > 1 ) AND peopleId NOT IN ( SELECT min(peopleId) FROM people GROUP BY peopleName HAVING count(peopleName) >

随机推荐