更新时间:2023-02-03 08:06:45
GROUPBY
: VAR uniqueContacts = DT。 AsEnumerable()
.GroupBy(X => x.Field<串GT;(电子邮件))
。选择(G => g.First());
您也可以尝试使用鲜明
:
DataTable的DT =新的DataTable();
dt.Columns.Add(ID);
dt.Columns.Add(名字);
dt.Columns.Add(电子邮件);
dt.Rows.Add(1,添,tim@mail.com);
dt.Rows.Add(2,TIM1,tim@mail.com);
dt.Rows.Add(3,TIM2,tim2@mail.com);
dt.Rows.Add(4TIM3,tim3@mail.com);
dt.AsEnumerable()是不同的(新DataRowComparer())转储()。
自定义行比较器:
公共类DataRowComparer:&的IEqualityComparer LT; DataRow的>
{
公共布尔等于(DataRow的T1,DataRow的T2)
{
回报率(t1.Field<串>(电子邮件)== t2.Field<串>( 电子邮件));
}
公众诠释的GetHashCode(DataRow的T)
{
返回t.ToString()GetHashCode()方法。
}
}
的http://msdn.microsoft.com/en-us/library/bb338049.aspx
I have seen the following solution used for removing duplicate rows in a DataTable
using LINQ
:
Say if we have a DataTable
with duplicate rows called dt
, then the following statemend apparently does the job:
IEnumerable<DataRow> uniqueContacts = dt.AsEnumerable().Distinct(DataRowComparer.Default);
But this is only removing duplicate rows that are identical. What I want to do is to remove all the rows that have duplicate values of a specific row.
E.g. If we have a datatable with a row called "Email", how can we remove all the rows that have the same email value?
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();
}
}