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();