问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

关于如何删除DataTable中的重复行

发布网友 发布时间:2022-04-11 17:58

我来回答

1个回答

热心网友 时间:2022-04-11 19:28

以前合作做一个程序的时候,由于数据库设计原因。让我碰到了一个比较棘手的问题,就是最后我的数据Table里面存在了一行或多行重复行,那么怎么删除这些重复行了。从网上找了许多材料,还是用了一个最笨的办法,把Table的行检索一遍把重复的行删除掉(在微软的社区里也有这样的例子)。最坏的情况时间复杂度为o(行X列)。如果数据量比较小的话,这样的性能还可以忍受。但是数据量大的话。其速度也就不言而喻了。检索部分代码如下:1public DataTable SelectDistinct(DataTable SourceTable, string FieldName) 2 { 3 DataTable dt =new DataTable(); 4for (Int32 i =0; i < SourceTable.Columns.Count; i++) 5 { 6string fieldName=SourceTable.Columns[i].Caption; 7 dt.Columns.Add(fieldName, SourceTable.Columns[fieldName].DataType); 8 } 910 DataRow dataRow = dt.NewRow(); 11foreach (DataRow dr in SourceTable.Select("", FieldName)) 12 { 13if (dataRow ==null||!(ColumnEqual(dataRow[FieldName], dr[FieldName]))) 14 { 15 dataRow=dr; 16 DataRow row = dt.NewRow(); 17for (int i =0; i < dataRow.ItemArray.Length; i++) 18 { 19 row[i] = dataRow[i]; 20 } 21 dt.Rows.Add(row); 22 } 23 } 24return dt; 25 } 上面的代码性能低。就不再多做剖析了。下面来看看.Net提供的一个方法。个人认为还是比没有的好。只是多了一个转的过程起码自己不用再像上面所使用方法一行一行来找了。好了,言归正传。看下面的代码privatevoid ShowDataViewSource() { //Table DataTable dataTable =new DataTable("dataTable"); DataColumn dataColumn =new DataColumn("dataColumn"); DataColumn dataColumn2 =new DataColumn("dataType"); dataTable.Columns.Add(dataColumn); dataTable.Columns.Add(dataColumn2); DataRow dataRow; for (int i =0; i <10; i++) { dataRow = dataTable.NewRow(); dataRow["dataColumn"] ="item "+ i; if (i <7) { dataRow["dataType"] ="1"; } else { dataRow["dataType"] ="2"; } dataTable.Rows.Add(dataRow); } //将Table填充到DataView并添加新的数据 DataView dataView =new DataView(dataTable); //添加n行数据 dataRow = dataTable.NewRow(); dataRow["dataColumn"] ="World"; dataRow["dataType"] ="3"; dataTable.Rows.Add(dataRow); //在这里添加重复数据 dataRow = dataTable.NewRow(); dataRow["dataColumn"] ="martin"; dataRow["dataType"] ="1"; dataTable.Rows.Add(dataRow); dataRow = dataTable.NewRow(); dataRow["dataColumn"] ="martin"; dataRow["dataType"] ="1"; dataTable.Rows.Add(dataRow); dataRow = dataTable.NewRow(); dataRow["dataColumn"] ="martin"; dataRow["dataType"] ="1"; dataTable.Rows.Add(dataRow); dataRow = dataTable.NewRow(); dataRow["dataColumn"] ="martin"; dataRow["dataType"] ="1"; dataTable.Rows.Add(dataRow); //第一个数据源 dg1.DataSource = dataView; //去掉重复行的DataView DataView myDataView =new DataView(dataTable); string[] strComuns ={ "dataColumn", "dataType" }; dg2.DataSource = myDataView.ToTable(true, strComuns); } 主要做的工作就是把存在重复行数据的DataTable送给Dataview.然后使用DataView类的一个ToTable方法中的一个重载方法。就是上面用的,一共有两个参数,第一个bool类型参数就是指定装换成DataTable后是否保留重复行,第二个参数是一个字符串数组,用来指定转换成 DataTable后保留原有表中的哪些字段。字段名不区分大小写。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
孤胆枪手怎么设置局域网啊、 我家小狗刚领来,没有名字,拜托大家起个名字。 护肤品代加工 水浒Q传跨服PK是怎么回事啊 新水浒Q传什么叫PK保护状态,上号不到一分钟就被打,求解 水浒Q传 为什么要pk有什么好处? 为什么贷款每次都审核失败 有谁能说一下手机贷审核不通过的原因吗?我都审核好多次了都不能通过... 贷款审核失败是什么原因 为什么贷款未通过审核 如何正确看待Linq的DistinctBy扩展和ForEach扩展 对单个字段的结果进行去重,用distinct执行效率快,还是用group by快 如果查询多列数据,distinct怎么不起作用了?sql SQL DISTINCT 问题请教 sql高手进!关于在sqlserver里实现一个表多字段distinct查询的问题。 sql,select distinct,怎么显示多列??,怎么还是有重复的住院号? sql 语句 distinct 多列显示问题 distinct可以多列吗 distinct和groupby在查询多列数据去重复时的区别在哪 在SQL2008中,我想把其中某表的某个字段的数据类型从int改成text,可是不成功,这是为什么呢? 在Sql server 2000数据库中的表中定义的一个字段是ntext类型,但导入内容会出问题,怎么办? 加急!如何替换sql中ntext类型数据中的某个字符? SQL替换字段最后一个字符和几个字符 求SQL批量修改表里字段!!! 用sql 语句实现页数中将“128页”中的页字换掉成为“128”,哪位大侠帮帮忙了。 如何把sql2000中数据库定时同步到sql2008数据库? SQLSERVER2000 把旧数据存储到另外一个数据库中 SQL 2000 server在同一台服务器2个数据库的表同步问题 2台SQL2000数据库数据如何实时同步 ASP+SQL Server2000如何进行参数化查询 Sqlserver2012 在还原.bak文件的时候,不能选择源文件,这是怎么回事? 如果不小心删除了电脑中的*.bak文件,导致officeXP或office2003无法使用,如何解决? 急需解决:系统还原 硬盘分区情况同备份时不同,不能执行系统恢复操作! 硬盘分区情况同备份时不同,不能执行系统恢复操作 ibatis中sql.xml怎么分割字符串并循环 sqlserver语句中,怎么样将字符串&#39;ab00000008&#39;减去2,得到&#39;ab00000006&#39; c#读取xml 中的数据库连接字符串 .net 执行 sql 语句 如何在asp.net中执行sql脚本文件 C#.NET 怎么对WINDOWS的CMD命令操作 .net 执行一个sql脚本 c# .net中 对于access数据库执行sql命令 ASP.NET执行sql语句 ASP.NET怎样使用SQL语句呢? asp.net 如何一次执行多条件Sql语句,如何解决? sqlserver 自定义函数怎么接收关键字参数 存储过程数据排序问题 用存储过程分页后,前台上一页,跳转页怎么写 asp.net 分页代码 首页 上一页 1 2 3 4 5 &gt;&gt; …… 30 下一页 尾页