C#去除DataTable重复数据的三种方法
业务需求
最近做一个把源数据库的数据批次导出到目标数据库。源数据库是采集程序采集而来的原始数据库,所以需要对其进行一些处理(过滤一些为空,长度太短或太长,非法字符,重复数据)然后在进行入库。
其中要避免目标库插入重复数据。这重复数据可能是源数据库本身就有重复数据,还有就是已经插入避免重复插入。
过滤自身重复数据解决方案
第一种:采用DataView.ToTable()方法
- DataView.ToTable方法
 - .NETFramework2.0
 
其根据现有DataView中的行,创建并返回一个新的DataTable。
重载列表
| 名称 | 说明 | 
|---|---|
| DataView.ToTable() | 根据现有 DataView 中的行,创建并返回一个新的 DataTable。
 由.NETCompactFramework支持。  | 
| DataView.ToTable(String) | 根据现有 DataView 中的行,创建并返回一个新的 DataTable。
 由.NETCompactFramework支持。  | 
| DataView.ToTable(Boolean,String[]) | 根据现有 DataView 中的行,创建并返回一个新的 DataTable。
 由.NETCompactFramework支持。  | 
| DataView.ToTable(String,Boolean,String[]) | 根据现有 DataView 中的行,创建并返回一个新的 DataTable。
 由.NETCompactFramework支持。  | 
实例代码
publicstaticDataTableDistinct(DataTabledt,string[]filedNames)
{
DataViewdv=dt.DefaultView;
DataTableDistTable=dv.ToTable("Dist",true,filedNames);
returnDistTable;
}
第二种方法:循环遍历+DataTable.Select()
利用for循环遍历DataTable的数据行,利用DataTable.Select方法判断是否重复,如果重复,则利用DataTable.Rows.RemoveAt(Index)删除重复的那一行。
具体看代码。
代码示例
publicDataTableGetDistinctSelf(DataTableSourceDt,stringfiledName)
{
for(inti=SourceDt.Rows.Count-2;i>0;i--)
{
DataRow[]rows=SourceDt.Select(string.Format("{0}='{1}'",filedName,SourceDt.Rows[i][filedName]));
if(rows.Length>1)
{
SourceDt.Rows.RemoveAt(i);
}
}
returnSourceDt;
}
第三种方法
利用双循环遍历(不推荐)
publicDataTableGetDistinctSelf(DataTableSourceDt,stringfiledName)
{
for(inti=SourceDt.Rows.Count-2;i>0;i--)
{
stringtitle=SourceDt.Rows[0][filedName].ToString();
for(intj=i+1;j>0;i--)
{
if(SourceDt.Rows[j][filedName].ToString()==title)
{
SourceDt.Rows.RemoveAt(i);
}
}
}
returnSourceDt;
}
到此这篇关于C#去除DataTable重复数据的三种方法的文章就介绍到这了,更多相关C#去除DataTable重复数据内容请搜索毛票票以前的文章或继续浏览下面的相关文章希望大家以后多多支持毛票票!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。