回転:DataTable重複除外(プログラム例比較)

10543 ワード

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

    }

}