去除DataTable重复数据的三种方法
业务需求
最近做一个把源数据库的数据批次导出到目标数据库。源数据库是采集程序采集而来的原始数据库,所以需要对其进行一些处理(过滤一些为空,长度太短或太长,非法字符,重复数据)然后在进行入库。
其中要避免目标库插入重复数据。这重复数据可能是源数据库本身就有重复数据,还有就是已经插入避免重复插入。
过滤自身重复数据解决方案
第一种:采用DataView.ToTable()方法
DataView.ToTable 方法
重载列表
| 名称 | 说明 |
|---|---|
| DataView.ToTable () | 根据现有 DataView 中的行,创建并返回一个新的 DataTable。
由 .NET Compact Framework 支持。 |
| DataView.ToTable (String) | 根据现有 DataView 中的行,创建并返回一个新的 DataTable。
由 .NET Compact Framework 支持。 |
| DataView.ToTable (Boolean, String[]) | 根据现有 DataView 中的行,创建并返回一个新的 DataTable。
由 .NET Compact Framework 支持。 |
| DataView.ToTable (String, Boolean, String[]) | 根据现有 DataView 中的行,创建并返回一个新的 DataTable。
由 .NET Compact Framework 支持。 |
实例代码
public static DataTable Distinct(DataTable dt, string[] filedNames)
{
DataView dv = dt.DefaultView;
DataTable DistTable = dv.ToTable("Dist", true, filedNames);
return DistTable;
}
第二种方法:循环遍历+DataTable.Select()
利用for循环遍历DataTable的数据行,利用DataTable.Select 方法判断是否重复,如果重复,则利用DataTable.Rows.RemoveAt(Index)删除重复的那一行。
具体看代码。
代码示例
public DataTable GetDistinctSelf(DataTable SourceDt, string filedName)
{
for (int i = SourceDt.Rows.Count - ; i > ; i--)
{
DataRow[] rows = SourceDt.Select(string.Format("{0}='{1}'", filedName, SourceDt.Rows[i][filedName]));
if (rows.Length > )
{
SourceDt.Rows.RemoveAt(i);
}
}
return SourceDt; }
第三种方法
利用双循环遍历(不推荐)
public DataTable GetDistinctSelf(DataTable SourceDt, string filedName)
{
for (int i = SourceDt.Rows.Count - ; i > ; i--)
{
string title = SourceDt.Rows[][filedName].ToString();
for (int j = i + ; j > ; i--)
{
if (SourceDt.Rows[j][filedName].ToString() == title)
{
SourceDt.Rows.RemoveAt(i); }
} }
return SourceDt;
}
去除DataTable重复数据的三种方法的更多相关文章
- 去除DataTable重复数据的三种方法(转)
转自:https://www.cnblogs.com/sunxi/p/4767577.html 业务需求 最近做一个把源数据库的数据批次导出到目标数据库.源数据库是采集程序采集而来的原始数据库,所以需 ...
- 关于iOS去除数组中重复数据的几种方法
关于iOS去除数组中重复数据的几种方法 在工作工程中我们不必要会遇到,在数组中有重复数据的时候,如何去除重复的数据呢? 第一种:利用NSDictionary的AllKeys(AllValues)方 ...
- php获取数组中重复数据的两种方法
分享下php获取数组中重复数据的两种方法. 1,利用php提供的函数,array_unique和array_diff_assoc来实现 <?php function FetchRepeatMem ...
- 关于Hive创建分区目录且能查到数据的三种方法
关于Hive创建分区目录且能查到数据的三种方法 1. 使用dfs -mkdir 和 dfs -put 分别创建分区目录和上传数据,此时执行msck repair table 表名 命令就能查询到数据 ...
- iOS - 去除数组中重复数据的几种方法
第一种:利用NSDictionary的AllKeys(AllValues)方法 代码: NSArray *dataArray = @[@"2018-02-01",@"20 ...
- python网络编程调用recv函数完整接收数据的三种方法
最近在使用python进行网络编程开发一个通用的tcpclient测试小工具.在使用socket进行网络编程中,如何判定对端发送一条报文是否接收完成,是进行socket网络开发必须要考虑的一个问题.这 ...
- C# Entity Framework 更新数据的三种方法
例: 实体类: public class TestDbContext : DbContext { public DbSet<Test> Tests { get; set; } public ...
- c# 利用IEqualityComparer接口去除DataTable重复数据
IEqualityComparer主要适用于定义方法以支持对象的相等比较.可以实现集合的自定义相等比较.即,您可以创建自己的相等定义,并指定此定义与接受 IEqualityComparer 接口的集合 ...
- TensorFlow读取数据的三种方法
tensortlfow数据读取有三种方式 placehold feed_dict:从内存中读取数据,占位符填充数据 queue队列:从硬盘读取数据 Dataset:同时支持内存和硬盘读取数据 plac ...
随机推荐
- [SAP ABAP开发技术总结]程序自己以JOB方式运行
声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...
- Deep Learning: Activation Function
Sigmoid Function ReLU Function Tanh Function
- MYSQL中的SELECT查询时进行运算
SELECT在mysql中是查询表中的数据的作用,但也可以在查询的时候直接进行运算,然后返回查询后的结果 比如 )) FROM username2 其中的IFNULL函数是对adven数据进行判断,若 ...
- eclipse 安装git
1.安装Git 首先安装Git.这里只讲Windows环境下安装Git方法. 从Git下载git的Windows安装文件,一路Next到选择安装组件这一步: 选上Git Bash Here这一项,这样 ...
- Java Ant build.xml详解
1,什么是antant是构建工具2,什么是构建概念到处可查到,形象来说,你要把代码从某个地方拿来,编译,再拷贝到某个地方去等等操作,当然不仅与此,但是主要用来干这个3,ant的好处跨平台 --因为 ...
- 使用js加载器动态加载外部Javascript文件
原文:http://www.cnblogs.com/xdp-gacl/p/3927417.html 今天在网上找到了一个可以动态加载js文件的js加载器,具体代码如下: JsLoader.js var ...
- 如何让JS的变量名变量化
unction message() { var k=0; // var olk+k="sdasdasd"; eval("var olk"+k+"='a ...
- Http报头Accept与Content-Type的区别
Http报头Accept与Content-Type的区别 1.Accept属于请求头, Content-Type属于实体头. Http报头分为通用报头,请求报头,响应报头和实体报头. 请求方的http ...
- grep的用法
grep的用法首先创建我们练习grep命令时需要用到的demo文件demo_file. $ cat demo_file THIS LINE IS THE 1ST UPPER CASE LINE IN ...
- IE浏览器GET传参后台乱码
ie里面 get传递的字符串 为 gb2312 ,后台用的是utf-8类型 所以用 POST传递字符串到后端 否则进行js参数转码 encodeURI(""); 后端解码