sunny123456

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  1796 随笔 :: 22 文章 :: 24 评论 :: 226万 阅读
< 2025年3月 >
23 24 25 26 27 28 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 1 2 3 4 5

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>


    <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、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

posted on   sunny123456  阅读(2122)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示