gpt4 book ai didi

c# - LINQ 根据特定行的值从数据表中删除重复行

转载 作者:行者123 更新时间:2023-11-30 19:39:28 27 4
gpt4 key购买 nike

我已经看到以下解决方案用于使用 LINQ 删除 DataTable 中的重复行:

假设我们有一个 DataTable,其中包含名为 dt 的重复行,那么下面的语句显然可以完成这项工作:

IEnumerable<DataRow> uniqueContacts = dt.AsEnumerable().Distinct(DataRowComparer.Default);

但这只是删除相同的重复行。我想要做的是删除所有具有特定行重复值的行。

例如如果我们有一个包含名为“电子邮件”的行的数据表,我们如何删除具有相同电子邮件值的所有行?

最佳答案

简单的方法:使用GroupBy:

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

你也可以尝试使用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();

自定义行比较器:

 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

关于c# - LINQ 根据特定行的值从数据表中删除重复行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27599261/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com