C# 不使用LINQ从数据表中删除重复的列值
以我的数据表为例C# 不使用LINQ从数据表中删除重复的列值,c#,ado.net,datatable,duplicate-removal,C#,Ado.net,Datatable,Duplicate Removal,以我的数据表为例 Id Name MobNo 1 ac 9566643707 2 bc 9944556612 3 cc 9566643707 如何在不使用LINQ的情况下删除c中包含重复MobNo列值的第3行。我在SO上看到过类似的问题,但所有答案都使用LINQ。在sharp DB上运行此程序之前,您可能希望在DISTINCT上查找内部工作原理,请确保备份!,但是,如果它像我认为的那样工作,获取第一个值,您应该能够使用非常类似于以下SQL的东西: DELETE
Id Name MobNo
1 ac 9566643707
2 bc 9944556612
3 cc 9566643707
如何在不使用LINQ的情况下删除c中包含重复MobNo列值的第3行。我在SO上看到过类似的问题,但所有答案都使用LINQ。在sharp DB上运行此程序之前,您可能希望在DISTINCT上查找内部工作原理,请确保备份!,但是,如果它像我认为的那样工作,获取第一个值,您应该能够使用非常类似于以下SQL的东西:
DELETE FROM YourTable WHERE Id NOT IN (SELECT DISTINCT Id, MobNo FROM YourTable);
当您读取CSV文件时,会看到一些伪代码,但您会看到:
List<String> uniqueMobiles = new List<String>();
String[] fileLines = readYourFile();
for (String line in fileLines) {
DataRow row = parseLine(line);
if (uniqueMobiles.Contains(row["MobNum"])
{
continue;
}
uniqueMobiles.Add(row["MobNum"]);
yourDataTable.Rows.Add(row);
}
这将仅将具有唯一移动设备的记录加载到您的数据表中。以下方法满足了我的要求
public DataTable RemoveDuplicateRows(DataTable dTable, string colName)
{
Hashtable hTable = new Hashtable();
ArrayList duplicateList = new ArrayList();
//Add list of all the unique item value to hashtable, which stores combination of key, value pair.
//And add duplicate item value in arraylist.
foreach (DataRow drow in dTable.Rows)
{
if (hTable.Contains(drow[colName]))
duplicateList.Add(drow);
else
hTable.Add(drow[colName], string.Empty);
}
//Removing a list of duplicate items from datatable.
foreach (DataRow dRow in duplicateList)
dTable.Rows.Remove(dRow);
//Datatable which contains unique records will be return as output.
return dTable;
}
您可以在C中使用IEqualityComparer这是最简单的方法 ** ** 我在这根线里找到的 我将它作为datatable返回,这对我来说是什么
DataTable uniqueContacts = dt.AsEnumerable()
.GroupBy(x=>x.Field<string>("Email"))
.Select(g=>g.First()).CopyToDataTable();
当发现重复的记录时,你想如何决定保留哪一个,删除哪一个?@Tomas总是第一个保留的记录…你想只获取一组具有唯一移动号码的记录,还是从现有记录集中删除具有重复的记录?@strelokstrelok ya我想要后一个…@Pandiya,好吧,你为什么不这么说=
DataTable uniqueContacts = dt.AsEnumerable()
.GroupBy(x=>x.Field<string>("Email"))
.Select(g=>g.First()).CopyToDataTable();