转:去掉DataTable重复数据(程序示例比较)

using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace RemoveDupRowDemoTest
{
    class Program
    {
        static void Main(string[] args)
        {
            DataTable _dt = new DataTable();
            _dt.Columns.Add("id", typeof(int));
            _dt.Columns.Add("name", typeof(string));
            _dt.Columns.Add("address", typeof(string));

            DataRow _dr = _dt.NewRow();
            _dr["id"] = 1;
            _dr["name"] = "lipeng";
            _dr["address"] = "DongXiaoKou";
            _dt.Rows.Add(_dr);
            _dt.Rows.Add(_dr.ItemArray);
            _dt.Rows.Add(_dr.ItemArray);
            _dr = _dt.NewRow();
            _dr["id"] = 2;
            _dr["name"] = "xiaoNa";
            _dr["address"] = "DongXiaoKou";
            _dt.Rows.Add(_dr);
            _dr = _dt.NewRow();
            _dr["id"] = 3;
            _dr["name"] = "BingLi";
            _dr["address"] = "TianTongYuan";
            _dt.Rows.Add(_dr);
            _dt.Rows.Add(_dr.ItemArray);
            Console.WriteLine("--------------------原来有重复数据的Table----------------------");
            _dt.AsEnumerable().ToList().ForEach(
                x =>
                {
                    Console.WriteLine(x["id"].ToString() + "  " + x["name"].ToString() + "   " + x["address"].ToString());
                });


            Console.WriteLine();

            Console.WriteLine("--------------------用Linq去重复后的Table----------------------");

            var _comPresult = _dt.AsEnumerable().Distinct(new DataTableRowCompare());
            DataTable _resultDt = _comPresult.CopyToDataTable();

            _resultDt.AsEnumerable().ToList().ForEach(
               x =>
               {
                   Console.WriteLine(x["id"].ToString() + "    " + x["name"].ToString() + "   " + x["address"].ToString());
               });

            Console.WriteLine();

            Console.WriteLine("--------------------用DefaultView去重复后的Table----------------------");
            DataTable _dtDefalut = _dt.DefaultView.ToTable(true, "id", "name", "address");


            _dtDefalut.AsEnumerable().ToList().ForEach(
              x =>
              {
                  Console.WriteLine(x["id"].ToString() + "    " + x["name"].ToString() + "   " + x["address"].ToString());
              });

            Console.ReadLine();
        }
    }
    public class DataTableRowCompare : IEqualityComparer<DataRow>
    {

        #region IEqualityComparer<DataRow> 成员

        public bool Equals(DataRow x, DataRow y)
        {
            return (x.Field<int>("id") == y.Field<int>("id"));
        }

        public int GetHashCode(DataRow obj)
        {
            return obj.ToString().GetHashCode();
        }

        #endregion
    }
}

 

转载于:https://www.cnblogs.com/Unrmk-LingXing/p/4081932.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值