从数据表中删除重复条目的最佳方法

Ana*_*nth 41 .net c# datatable duplicate-data

从数据表中删除重复条目的最佳方法是什么?

小智 78

不要dtEmp在你的当前工作的DataTable:

DataTable distinctTable = dtEmp.DefaultView.ToTable( /*distinct*/ true);
Run Code Online (Sandbox Code Playgroud)

这真好.

  • 这个答案值得更多关注,正是我所需要的,并且比构建哈希表/字典/更简单,只要您只需要过滤精确的重复项. (7认同)

rat*_*tty 72

删除重复项

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;
}
Run Code Online (Sandbox Code Playgroud)

这里链接如下

http://www.dotnetspider.com/resources/4535-Remove-duplicate-records-from-table.aspx

http://www.dotnetspark.com/kb/94-remove-duplicate-rows-value-from-datatable.aspx

用于删除列中的重复项

http://dotnetguts.blogspot.com/2007/02/removing-duplicate-records-from.html


小智 14

这篇文章是关于基于多个列仅从数据表中获取Distincts行.

Public coid removeDuplicatesRows(DataTable dt)
{
  DataTable uniqueCols = dt.DefaultView.ToTable(true, "RNORFQNo", "ManufacturerPartNo",  "RNORFQId", "ItemId", "RNONo", "Quantity", "NSNNo", "UOMName", "MOQ", "ItemDescription");
} 
Run Code Online (Sandbox Code Playgroud)

您需要调用此方法,并且需要为数据表赋值.在上面的代码中,我们有RNORFQNo,PartNo,RFQ id,ItemId,RNONo,QUANTity,NSNNO,UOMName,MOQ和Item Description作为我们想要不同值的列.


Has*_*man 12

一个简单的方法是:

 var newDt= dt.AsEnumerable()
                 .GroupBy(x => x.Field<int>("ColumnName"))
                 .Select(y => y.First())
                 .CopyToDataTable();
Run Code Online (Sandbox Code Playgroud)

  • 这就是适合我的。无需删除其他列,只需忽略所提到的列名称的重复记录即可。 (2认同)

Sat*_*ngh 5

这是一种简单快捷的使用方法 AsEnumerable().Distinct()

private DataTable RemoveDuplicatesRecords(DataTable dt)
{
    //Returns just 5 unique rows
    var UniqueRows = dt.AsEnumerable().Distinct(DataRowComparer.Default);
    DataTable dt2 = UniqueRows.CopyToDataTable();
    return dt2;
}
Run Code Online (Sandbox Code Playgroud)