zoukankan      html  css  js  c++  java
  • 内存中DataTable去除重复行

    删除内存中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;

            }

  • 相关阅读:
    vtk 矩阵管理系统
    在opengl中使用纹理
    [译文]:单元测试的七种境界
    [翻译]:六分钟八法则塑造优秀程序员
    weekly review 200921: Power Sleep
    Bye, Scofield
    weekly review 200922: Goal
    weekly review 200920: Prototype Demo
    转载:测试驱动开发三原则
    weekly review 200918: productive
  • 原文地址:https://www.cnblogs.com/huyueping/p/3517635.html
Copyright © 2011-2022 走看看