【问题标题】:Remove duplicate column values from a datatable without using LINQ不使用 LINQ 从数据表中删除重复的列值
【发布时间】:2023-03-12 06:38:01
【问题描述】:

考虑一下我的数据表,

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

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

【问题讨论】:

  • 当发现重复项时,您想如何决定保留哪些,删除哪些?
  • @Tomas 永远是第一个留下...
  • 您想只获取一组具有唯一手机号码的记录,还是从现有集合中删除具有重复项的记录?
  • @strelokstrelok 是的,我想要后者...

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


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    当您阅读您的 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);       
    }
    

    这只会将具有唯一手机的记录加载到您的数据表中。

    【讨论】:

      【解决方案3】:

      这是最简单的方法。

      **

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

      【讨论】:

        【解决方案4】:

        您可能想先查看 DISTINCT 的内部工作原理,然后再在您的清晰数据库上运行它(一定要备份!),但如果它像我认为的那样工作(获取第一个值),您应该能够使用(非常类似于)以下 SQL:

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

        【讨论】:

        • @Pandiya,好吧,你为什么不这么说? =)
        【解决方案5】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-02-20
          • 1970-01-01
          • 1970-01-01
          • 2017-11-28
          相关资源
          最近更新 更多