• C# 去除DataTable表中重复行


    https://blog.csdn.net/weixin_41561640/article/details/106133842

    去除DataTable表中重复行有两种方法:
    一、利用sql语句的distinct 关键字
    如:select distinct * from table_name;
    二、利用DataView.ToTable()方法
    1.DataView.ToTable()

    根据现有DataView中的行,创建并返回一个新的DataTable。

    2.DataView.ToTable(String)

    根据现有DataView中的行,创建并返回一个新的DataTable。参数String为返回的DataTable的名称,输出的表与输入表的列相通,不可自定义。

    3.DataView.ToTable(Boolean,String[])

    根据现有DataView中的行,创建并返回一个新的DataTable。参数Boolean如果为true,则去重,为false时不去重,且默认为false。

    可自定义返回的列,数组String[]为显示返回列的集合。

    例子:

    //去掉重复行
    DataTable dt = db.GetDataTable("select * from 表名"); //获得datatable
    DataView dv = dt.DefaultView;
    table = dv.ToTable(true, new string[] { "name", "code" });
    

    public DataTable GetDataTable(string strSql)
    {
    try
    {
    //DataSet dataSet = new DataSet();
    //SqlDataAdapter adapter = new SqlDataAdapter(strSql, _Connection);
    //adapter.Fill(dataSet);
    //return dataSet.Tables[0];
    DataTable dt= new DataTable ();
    SqlDataAdapter adapter = new SqlDataAdapter(strSql, _Connection);
    adapter.Fill(dt);
    return dt;
    }
    catch
    {
    return null;
    }
    }

    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    如果有一组数据(id不是唯一字段)

    namecode
    张三123
    李四123
    张三456
    张三123

    通过上面的方法得到

    namecode
    张三123
    李四123
    张三456

    4.DataView.ToTable(String,Boolean,String[])

    根据现有DataView中的行,创建并返回一个新的DataTable。第一个参数string用来定义返回表的名称。

    注意:想要的结果是只针对其中的一列去重,还要显示其他的列,怎么做

    #region 删除DataTable重复列,类似distinct
            /// <summary>   
            /// 删除DataTable重复列,类似distinct   
            /// </summary>   
            /// <param name="dt">DataTable</param>   
            /// <param name="Field">字段名</param>   
            /// <returns></returns>   
            public static DataTable DeleteSameRow(DataTable dt, string Field)
            {
                ArrayList indexList = new ArrayList();
                // 找出待删除的行索引   
                for (int i = 0; i < dt.Rows.Count - 1; i++)
                {
                    if (!IsContain(indexList, i))
                    {
                        for (int j = i + 1; j < dt.Rows.Count; j++)
                        {
                            if (dt.Rows[i][Field].ToString() == dt.Rows[j][Field].ToString())
                            {
                                indexList.Add(j);
                            }
                        }
                    }
                }
                indexList.Sort();
     // 排序
                for (int i = indexList.Count - 1; i >= 0; i--)// 根据待删除索引列表删除行  
                {
                    int index = Convert.ToInt32(indexList[i]);
                    dt.Rows.RemoveAt(index);
                }
                return dt;
            }
    
        <span class="token comment">/// &lt;summary&gt;   </span>
        <span class="token comment">/// 判断数组中是否存在   </span>
        <span class="token comment">/// &lt;/summary&gt;   </span>
        <span class="token comment">/// &lt;param name="indexList"&gt;数组&lt;/param&gt;   </span>
        <span class="token comment">/// &lt;param name="index"&gt;索引&lt;/param&gt;   </span>
        <span class="token comment">/// &lt;returns&gt;&lt;/returns&gt;   </span>
        <span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token keyword">bool</span> <span class="token function">IsContain</span><span class="token punctuation">(</span><span class="token class-name">ArrayList</span> indexList<span class="token punctuation">,</span> <span class="token keyword">int</span> index<span class="token punctuation">)</span>
        <span class="token punctuation">{<!-- --></span>
            <span class="token keyword">for</span> <span class="token punctuation">(</span><span class="token keyword">int</span> i <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span> i <span class="token operator">&lt;</span> indexList<span class="token punctuation">.</span>Count<span class="token punctuation">;</span> i<span class="token operator">++</span><span class="token punctuation">)</span>
            <span class="token punctuation">{<!-- --></span>
                <span class="token keyword">int</span> tempIndex <span class="token operator">=</span> Convert<span class="token punctuation">.</span><span class="token function">ToInt32</span><span class="token punctuation">(</span>indexList<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
                <span class="token keyword">if</span> <span class="token punctuation">(</span>tempIndex <span class="token operator">==</span> index<span class="token punctuation">)</span>
                <span class="token punctuation">{<!-- --></span>
                    <span class="token keyword">return</span> <span class="token keyword">true</span><span class="token punctuation">;</span>
                <span class="token punctuation">}</span>
            <span class="token punctuation">}</span>
            <span class="token keyword">return</span> <span class="token keyword">false</span><span class="token punctuation">;</span>
        <span class="token punctuation">}</span>
        <span class="token preprocessor property">#<span class="token directive keyword">endregion</span></span>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53

    借鉴文章:
    1、C# DataTable去重,根据列名去重保留其他列
    原文链接:https://blog.csdn.net/qq_23502409/article/details/75269221
    2、C# 中怎样去除DataTable表里面的重复行
    原文链接:https://blog.csdn.net/u010892197/article/details/50310907
    3、c# DataView.ToTable() 方法 去除表中的重复项
    原文链接:https://blog.csdn.net/JYL15732624861/article/details/61422332


    注意:
    比如:
    DataTable dt=db.GetDataTable(“select * from 表名”); //获得datatable
    DataView dv = new DataView(dt);//对dt这个表创建一个视图(注意:这里的DataView只能对一个datatable进行创建视图)
    DataTable dt2 = dv.ToTable(true, “name“,”age“,”sex”);//true:true 去除重复,false 不去除; "name“,“age”,“sex”:表示需要显示的字段,特别注意:需要将每个栏位用双引号括起来,不然会报错:列“name,age,sex”不属于基础表
    ————————————————
    原文链接:https://blog.csdn.net/qq_27929003/article/details/105675240

  • 相关阅读:
    Blob格式数据处理以及DataTable问题处理
    JavaScript 与 jQuery-简记
    JFinal-学习笔记(下)
    JFinal学习笔记
    工作记录
    读书笔记——计算机科学导论
    面试经验大全
    如何在liunx系统发布项目
    面试必备
    最全面的测试用例
  • 原文地址:https://www.cnblogs.com/sunny3158/p/14701544.html
Copyright © 2020-2023  润新知