删除内存中DataTable表的重复行

假设在内存中(不是数据库中)有两个表:

表一:TableA

Name

Phone

张三

123456

李四

123457

王五

1234568

表二:TableB

Name

Phone

张三

123456

李四2

123465

王五2

123466

现在要求把这两个表按照手机号去重后合并。

方法一:

观察后发现,这两个表有重复项:TableA中的“张三”和TableB中的“张三”。

我们可以用算法在程序中遍历两个表去重,对比之后再放入新的表中,返回新表,这个方法可行,不过数据量大的时候性能就会特别差,耗时很高。

方法二:

我们可以用.net提供的Linq查询做,很方便。参考:http://blog.csdn.net/q107770540/article/details/6252339

方法三:

我们可以用“筛选视图”做,比较方便。

首先,建一个TableC,把字段“Phone”设为主键,把第一个表的架构和数据复制到新建的TableC中,然后把第二个表合并到TableC中,最后用DefaultView.ToTable方法去重,返回TableC即可。源码如下:

/// <summary>

/// 合并数据

/// </summary>

/// <param name="TableA">表一</param>

/// <param name="TableB">表二</param>

/// <returns></returns>

public DataTable MergeData(DataTable TableA, DataTable TableB)

{

DataTable TableC = new DataTable();

TableC = TableA.Copy();//复制架构和数据

TableC.PrimaryKey = new DataColumn[1] { TableC.Columns["Phone"] };//设置主键

TableC.Merge(TableB);//合并B表

TableA.Dispose();

TableB.Dispose();

//要保留的字段

string[] Colomns = new string[] { " Name ","Phone"};

//已去重的表

TableC = TableC.DefaultView.ToTable(true, Colomns);

return TableC;

}

最新文章

  1. tomcat安装和配置
  2. 【bzoj3527】[Zjoi2014]力 FFT
  3. 用atom写LaTeX文档
  4. input框颜色修该
  5. java多线程实现卖票小程序
  6. 《day17_String_StringBuffer》
  7. 利用ORACLE ADV 功能完成SQL TUNING 调优(顾问培训) &ldquo;让DBA失业还是解脱?&rdquo;
  8. FusionCharts生成Flash图表常见问题FAQ
  9. cocos2dx 中文路径编译错误记录
  10. 第二章 R语言数据结构
  11. C语言--总结报告
  12. Pytoch机器学习乱玩(一):数学建模作业,体重与心率
  13. HDU 2196 Compute --树形dp
  14. TCP/IP协议 网络层
  15. (转)db2top详解
  16. 利用ChromeCROSS可以在chrome浏览器上调试跨域代码
  17. python 字符串组成MySql 命令时,字符串含有单引号或者双引号导致出错解决办法
  18. 动态开点线段树(陕西师范18k题)---get new skill
  19. 使用 WebSphere ILOG JRules 开发保险应用系统
  20. struts1的配置文件详解11111

热门文章

  1. Java JDK安装和配置(Windows)
  2. json数据格式字符串在java中的转移
  3. RbbitMQ基础知识
  4. android中状态栏透明
  5. TStrings的一些技巧(转)
  6. php 权限 管理
  7. Array数组(PHP学习)
  8. protobuff java 包编译(Windows)
  9. 【转】Jmeter Http请求界面解释
  10. java 最差实践