LINQ to remove duplicate rows from a datatable based on the value of a specific row

随声附和 提交于 2019-12-04 19:09:07
Tim.Tang

simple way: use GroupBy:

var uniqueContacts = dt.AsEnumerable()
                       .GroupBy(x=>x.Field<string>("Email"))
                       .Select(g=>g.First());

you can also try use Distinct:

    DataTable dt = new DataTable();  
    dt.Columns.Add("ID");  
    dt.Columns.Add("FirstName");  
    dt.Columns.Add("Email");  
    dt.Rows.Add(1,"Tim","tim@mail.com");
    dt.Rows.Add(2,"Tim1","tim@mail.com");
    dt.Rows.Add(3,"Tim2","tim2@mail.com");
    dt.Rows.Add(4,"Tim3","tim3@mail.com");

    dt.AsEnumerable().Distinct(new DataRowComparer()).Dump();

Custom row comparer:

 public class DataRowComparer : IEqualityComparer<DataRow>  
    {  
        public bool Equals(DataRow t1, DataRow t2)  
        {  
            return (t1.Field<string>("Email")==t2.Field<string>("Email"));  
        }  
        public int GetHashCode(DataRow t)  
        {  
            return t.ToString().GetHashCode();  
        }  
    }  

http://msdn.microsoft.com/en-us/library/bb338049.aspx

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!