ASP.Net【如何合并DataTable,并且去重复方法】
虽然DataTable.Merge可以很好的实现,但以下代码写出来更好理解
- DataTable DataTable1 = new DataTable();
- DataTable DataTable2 = new DataTable();
- DataTable newDataTable = DataTable1.Clone();
- object[] obj = new object[newDataTable.Columns.Count];
- for (int i = ; i < DataTable1.Rows.Count; i++)
- {
- DataTable1.Rows[i].ItemArray.CopyTo(obj,);
- newDataTable.Rows.Add(obj);
- }
- for (int i = ; i < DataTable2.Rows.Count; i++)
- {
- DataTable2.Rows[i].ItemArray.CopyTo(obj,);
- newDataTable.Rows.Add(obj);
- }
- //或者
- DataTable DataTable1 = new DataTable();
- DataTable DataTable2 = new DataTable();
- object[] obj = new object[DataTable1 .Columns.Count];
- for (int i = ; i < DataTable2.Rows.Count; i++)
- {
- DataTable2.Rows[i].ItemArray.CopyTo(obj,);
- DataTable1.Rows.Add(obj);
- }
两个结构不同的DataTable合并
- /// <summary>
- /// 将两个列不同的DataTable合并成一个新的DataTable
- /// </summary>
- /// <param name="dt1">Table表1</param>
- /// <param name="dt2">Table表2</param>
- /// <param name="DTName">合并后新的表名</param>
- /// <returns></returns>
- private DataTable UniteDataTable( DataTable dt1 ,DataTable dt2 ,string DTName)
- {
- DataTable dt3 = dt1.Clone();
- for( int i = ;i < dt2.Columns.Count ;i ++ )
- {
- dt3.Columns.Add( dt2.Columns[i].ColumnName ) ;
- }
- object[] obj = new object[dt3.Columns.Count];
- for (int i = ; i < dt1.Rows.Count; i++)
- {
- dt1.Rows[i].ItemArray.CopyTo(obj,);
- dt3.Rows.Add(obj);
- }
- if( dt1.Rows.Count >= dt2.Rows.Count )
- {
- for( int i = ;i < dt2.Rows.Count ;i++ )
- {
- for( int j = ;j < dt2.Columns.Count ;j ++ )
- {
- dt3.Rows[i][j+dt1.Columns.Count] = dt2.Rows[i][j].ToString() ;
- }
- }
- }
- else
- {
- DataRow dr3 ;
- for( int i = ;i < dt2.Rows.Count - dt1.Rows.Count ;i ++ )
- {
- dr3 = dt3.NewRow() ;
- dt3.Rows.Add( dr3 ) ;
- }
- for( int i = ;i < dt2.Rows.Count ;i++ )
- {
- for( int j = ;j < dt2.Columns.Count ;j ++ )
- {
- dt3.Rows[i][j+dt1.Columns.Count] = dt2.Rows[i][j].ToString() ;
- }
- }
- }
- dt3.TableName = DTName ;
- return dt3 ;
- }
今天一位朋友问如何去掉DataTable里重复的记录(DataTable是别人返回过来的,不能再重新查询数据库,所以无法用sql中的select distinct xxx处理,只能在DataTable上动脑筋)
思路:将DataTable转成IEnumerable,然后就能调用Distinct方法了
- System.Collections.Generic;
- using System.Linq;
- using System.Data;
- using System;
- namespace ConsoleApplication2
- {
- class Program
- {
- static void Main(string[] args)
- {
- DataTable tbl = new DataTable();
- tbl.Columns.Add("Id", typeof(System.Int32));
- tbl.Columns.Add("City", typeof(System.String));
- tbl.Columns.Add("Province", typeof(System.String));
- tbl.Rows.Add(, "武汉", "湖北");
- tbl.Rows.Add(, "应城", "湖北");
- tbl.Rows.Add(, "武汉", "湖北");
- IEnumerable <DataRow> r = tbl.AsEnumerable().Distinct(new CityComparer());
- //到这一步,r里就是去重复的记录了
- foreach (var item in r)
- {
- Console.WriteLine(item["Id"] + "," + item["City"] + "," + item["Province"]);
- }
- Console.ReadLine();
- }
- }
- class CityComparer : IEqualityComparer <DataRow>
- {
- public bool Equals(DataRow r1, DataRow r2)
- {
- return r1["City"] == r2["City"];
- }
- public int GetHashCode(DataRow obj)
- {
- return obj.ToString().GetHashCode();
- }
- }
- }
上面的代码,将DataTable中"城市名"重复的记录去掉了,以上代码同样适用于List<T>(只要改下"比较器"即可)
ASP.Net【如何合并DataTable,并且去重复方法】的更多相关文章
- DataTable去重复方法
//去掉重复行 DataTable table=new DataTable(); DataView dv = table.DefaultView; table = dv.ToTable(true, n ...
- 漫谈数组去重复方法(亮点是ES6的新API)
方法1: 利用遍历的思想来进行. <!DOCTYPE html><html lang="en"><head> <meta charset= ...
- DataTable distinct 去重复
有时我们需要从DataTable中抽取Distinct数据,以前总是以对DataTable进行foreach之类纯手工方式获取. 近来发现DataView可以帮我们直接获取Distinct数据,汗一个 ...
- 利用Linq对集合元素合并、去重复处理
本文转载:http://www.cnblogs.com/yjmyzz/archive/2012/12/18/2823170.html 今天写代码时,需要对一个数组对象中按一定规则合并.去重处理,不想再 ...
- 批处理快速合并多分Excel文件并将指定列的数据去重复
1.批处理快速合并多个excel文件方法: 新建一个.txt文本文件,就命名为合并.txt吧. 而后开启文件,复制以下代码到文件中: @echo off E: cd xls dir copy *.cs ...
- 为了去重复,写了一个通用的比较容器类,可以用在需要比较的地方,且支持Lamda表达式
为了去重复,写了一个通用的比较容器类,可以用在需要比较的地方,且支持Lamda表达式,代码如下: public class DataComparer<T>:IEqualityCompare ...
- ASP.NET MVC 使用dataTable(3)--更多选项参考
ASP.NET MVC 使用dataTable(3)--更多选项参考 jQuery dataTables 插件是一个优秀的表格插件,是后台工程师的福音!它提供了针对数据表格的排序.浏览器分页.服务器 ...
- R合并数据框有重复匹配时只保留第一行
前言 合并数据框有重复匹配时通常会返回所有的匹配,如何只保留匹配的第一行呢?其实这个需求也很常见.如芯片探针ID和基因ID往往多对一,要合并ID对应矩阵和芯片表达矩阵时. 数据例子 data = da ...
- mysql数据库去重复
参考:http://www.cnblogs.com/duanjie/archive/2011/08/13/2136862.html 说到去重复,感觉逻辑很简单.但动手写起来却并不是那么容易.面试的时候 ...
随机推荐
- iOS 10 的一些变化
原文链接:http://www.jianshu.com/p/9756992a35ca
- HTML5 HybridApp开发上手指引
眼下我们项目是基于AngularJS和ionic框架开发的Hybrid App.支持android phone/pad, iPhone,iPad四个平台版本号.以及微信版. 由于使用的技术有点新,所以 ...
- MySql5.1在Win7下的安装与重装问题的解决
痛苦啊痛苦,我也不知道这两天怎么了.上班没有精神,还打瞌睡,下班后又感觉很累.精力集中不起来. 这篇花了我好久的时间,我效率这么差,~\(≧▽≦)/~. 软件包下载 首先单击mysql-5.1.53- ...
- VS2010 配置 DirectX 开发环境
1.首先下载 DXSDK 并安装 http://download.microsoft.com/download/A/E/7/AE743F1F-632B-4809-87A9-AA1BB3458E31/D ...
- CDZSC_2015寒假新人(1)——基础 f
Description An inch worm is at the bottom of a well n inches deep. It has enough energy to climb u i ...
- 七牛云Fetch第三方资源并转码(PHP版)
七牛云的图片加速一直在用,好用没得说,最近项目需要做个微信端录音,然后上传,别人试听的功能,录音和上传用的都是微信的接口,有文档,比较方便,但是上传后,微信只给保存3天,所以就下载到了七牛,也就用到了 ...
- MySQL命令记录1
mysql命令行 开启:net start mysql56关闭:net start mysql56(这两种情况必须有管理员权限) 登陆:mysql -h localhost -u root -p(lo ...
- Android小代码——设置全屏
1: public class MainActivity extends Activity { 2: @Override 3: public void onCreate(Bundle savedIns ...
- Vector, ArrayList, Array
JAVA新手在使用JAVA的时候大概都会遇到这个问题: JAVA中的Array, ArrayList, Vector, List, LinkedList有什么样的区别?尤其是Vector, Array ...
- Oracle EBS-SQL (OM-5):检查订单事务处理类型.sql
SELECT HO.NAME OU ...