在不使用LINQ的情况下从数据表中删除重复的列值

时间:2010-05-24 06:05:41

标签: c# ado.net datatable duplicate-removal

考虑我的数据表,

Id  Name  MobNo
1   ac    9566643707
2   bc    9944556612
3   cc    9566643707

如何在不使用LINQ的情况下删除c#中包含重复3列值的行MobNo。我在SO上看过类似的问题,但所有答案都使用LINQ。

5 个答案:

答案 0 :(得分:4)

以下方法做了我想要的......

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;
    }

答案 1 :(得分:1)

当你正在阅读你的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);       
}

这只会将包含唯一移动设备的记录加载到您的数据表中。

答案 2 :(得分:0)

你可能想在DISTINCT上查找内部工作方法,然后在你的锐利数据库上运行它(确保备份!),但是如果它按照我认为的那样工作(抓住第一个值)你应该能够使用(非常类似于)以下SQL:

DELETE FROM YourTable WHERE Id NOT IN (SELECT DISTINCT Id, MobNo FROM YourTable);

答案 3 :(得分:0)

您可以在C#中使用“IEqualityComparer”

答案 4 :(得分:0)

这是最简单的方法。

**

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

** 我在这个帖子中找到了它  LINQ to remove duplicate rows from a datatable based on the value of a specific row

对我来说实际上我将它作为数据表返回

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