dis*_*kid 2 c# linq datatable duplicates
我已经看到了用于在去除重复行以下解决方案DataTable使用LINQ:
假设我们有一个DataTable带有重复行的调用dt,那么下面的statemend显然可以完成这项工作:
IEnumerable<DataRow> uniqueContacts = dt.AsEnumerable().Distinct(DataRowComparer.Default);
Run Code Online (Sandbox Code Playgroud)
但这只是删除相同的重复行.我想要做的是删除具有特定行重复值的所有行.
例如,如果我们有一个名为"Email"的行的数据表,我们如何删除所有具有相同电子邮件值的行?
简单方法:使用GroupBy:
var uniqueContacts = dt.AsEnumerable()
.GroupBy(x=>x.Field<string>("Email"))
.Select(g=>g.First());
Run Code Online (Sandbox Code Playgroud)
你也可以尝试使用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();
Run Code Online (Sandbox Code Playgroud)
自定义行比较器:
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();
}
}
Run Code Online (Sandbox Code Playgroud)
http://msdn.microsoft.com/en-us/library/bb338049.aspx
| 归档时间: |
|
| 查看次数: |
15903 次 |
| 最近记录: |