從數據表中刪除重複條目的最佳方法是什麼?從數據表中刪除重複條目的最佳方法
回答
刪除重複
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;
}
這裏鏈接下面
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
:我怎麼能做到多列。我試過包括字符串[] colName.But Table.Rows.Remove(dRow);拋出錯誤,如「給定的DataRow不在當前DataRowCollection中」。請建議。 – user1495475 2012-10-17 12:05:56
您將不得不在更多級別上逐步修改foreach。但是,使用Linq可能會更容易。 http://stackoverflow.com/questions/8939516/how-to-find-duplicate-record-using-linq-from-datatable – miracules 2013-04-18 08:50:01
來自dotnetspark的鏈接爲我工作,因爲我只需要刪除行,如果2列的行匹配。但這隻適用於一種類型,但對我來說這很好! – DarkPh03n1X 2015-11-11 18:20:39
做dtEmp
在當前工作的DataTable:
DataTable distinctTable = dtEmp.DefaultView.ToTable(/*distinct*/ true);
很高興。
這個答案值得更多的關注,正是我所需要的和比構建一個哈希表/字典/任何只要你只需要過濾確切的重複更簡單。 – lee 2014-07-23 06:20:56
請注意此解決方案的性能。在我的實現ToTable()很慢,比獲取數據的原始查詢長30倍。 – 2015-06-02 18:17:37
這段代碼就是我想要的。簡單而好用。 – 2016-02-07 07:54:59
使用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;
}
感謝您發佈您的答案!請務必仔細閱讀[自助推廣常見問題](http://stackoverflow.com/faq#promotion)。另請注意,每次鏈接到您自己的網站/產品時,您都必須*發佈免責聲明。我在這裏爲你添加披露信息;試着爲未來記住這一點! – 2013-03-07 10:01:58
這很慢.. – LuckyS 2015-07-13 12:32:39
這篇文章是關於多個列的基礎上只讀取數據,從表Distincts行繼承人方便,快捷的方式。
Public coid removeDuplicatesRows(DataTable dt)
{
DataTable uniqueCols = dt.DefaultView.ToTable(true, "RNORFQNo", "ManufacturerPartNo", "RNORFQId", "ItemId", "RNONo", "Quantity", "NSNNo", "UOMName", "MOQ", "ItemDescription");
}
您需要調用此方法,並且需要爲數據表賦值。 在上面的代碼中,我們將RNORFQNo,PartNo,RFQ id,ItemId,RNONo,QUantity,NSNNO,UOMName,MOQ和項目描述作爲Column列出,我們希望獲得不同的值。
非常感謝。真的有助於:)簡單的解決方案 – Rebecca 2016-06-09 21:37:24
/* To eliminate Duplicate rows */
private void RemoveDuplicates(DataTable dt)
{
if (dt.Rows.Count > 0)
{
for (int i = dt.Rows.Count - 1; i >= 0; i--)
{
if (i == 0)
{
break;
}
for (int j = i - 1; j >= 0; j--)
{
if (Convert.ToInt32(dt.Rows[i]["ID"]) == Convert.ToInt32(dt.Rows[j]["ID"]) && dt.Rows[i]["Name"].ToString() == dt.Rows[j]["Name"].ToString())
{
dt.Rows[i].Delete();
break;
}
}
}
dt.AcceptChanges();
}
}
有一種使用Linq GroupBy方法的簡單方法。
var duplicateValues = dt.AsEnumerable()
.GroupBy(row => row[0])
.Where(group => (group.Count() == 1 || group.Count() > 1))
.Select(g => g.Key);
foreach (var d in duplicateValues)
Console.WriteLine(d);
我想你不需要按count()== 1來分組,否則你將得到所有的行。 – 2014-09-06 15:54:13
一個簡單的方法是:
var newDt= dt.AsEnumerable()
.GroupBy(x => x.Field<int>("ColumnName"))
.Select(y => y.First())
.CopyToDataTable();
完全不同的行:
public static DataTable Dictinct(this dt) => dt.DefaultView.ToTable(true);
鮮明由特定行(一個或多個)(注意,在「distinctCulumnNames」中提到的列將在結果DataTable退還):
public static DataTable Dictinct(this dt, params string[] distinctColumnNames) =>
dt.DefaultView.ToTable(true, distinctColumnNames);
通過特定的列中不同(保持在給定的數據表中的所有列):
public static void Distinct(this DataTable dataTable, string distinctColumnName)
{
var distinctResult = new DataTable().Merge(
dataTable.AsEnumerable()
.GroupBy(row => row.Field<object>(distinctColumnName))
.Select(group => group.First())
.CopyToDataTable()
);
if (distinctResult.DefaultView.Count < dataTable.DefaultView.Count)
{
dataTable.Clear();
dataTable.Merge(distinctResult);
dataTable.AcceptChanges();
}
}
可以使用一個DataTable的DefaultView.ToTable方法來做這樣的過濾(適應C#):
Public Sub RemoveDuplicateRows(ByRef rDataTable As DataTable)
Dim pNewDataTable As DataTable
Dim pCurrentRowCopy As DataRow
Dim pColumnList As New List(Of String)
Dim pColumn As DataColumn
'Build column list
For Each pColumn In rDataTable.Columns
pColumnList.Add(pColumn.ColumnName)
Next
'Filter by all columns
pNewDataTable = rDataTable.DefaultView.ToTable(True, pColumnList.ToArray)
rDataTable = rDataTable.Clone
'Import rows into original table structure
For Each pCurrentRowCopy In pNewDataTable.Rows
rDataTable.ImportRow(pCurrentRowCopy)
Next
End Sub
- 1. 從散列表中刪除條目的最佳方法
- 2. 刪除重複分組數據的最佳方法 - SQL Server 2008
- 3. 從mySQL數據庫表中刪除重複的用戶條目
- 4. 從多個表中刪除數據的最佳方法?
- 5. 刪除字典列表中重複值的最佳方法?
- 6. 刪除重複的條目從條件的數據庫
- 7. 根據外鍵列刪除交集表中的重複行的最佳方法
- 8. 刪除地圖中的一組條目的最佳方法
- 9. 在Java中刪除集合中重複的最佳方法?
- 10. 從MySQL數據庫中刪除重複的條目
- 11. 如何從數據庫中刪除重複的條目?
- 12. 如何刪除MySql數據庫表中的重複條目
- 13. 如何使用C#刪除數據表中的重複條目?
- 14. 刪除SQL重複數據保留最早的條目
- 15. 從查詢中刪除重複條目
- 16. 從列表中刪除重複元素的最有效方法
- 17. 刪除linux中重複列的最佳方法
- 18. 使用Linq方法從列表中刪除重複條目語法
- 19. 刪除重複的條目
- 20. 刪除重複的條目?
- 21. 如何從MySQL數據庫中刪除重複(字段)條目?
- 22. 根據自定義重複值從數組中刪除條目
- 23. 如何從數組列表中刪除重複條目
- 24. 從oracle中的兩個大表中刪除公共數據的最佳方法?
- 25. 使用jQuery從數據庫中的表中刪除重複條目
- 26. 從Mysql數據庫刪除重複的條目
- 27. 從Python字典中刪除項目的最佳方法?
- 28. 從多維MutableArray中刪除重複的對象的最佳方法objective-C
- 29. Javascript - 刪除重複條目
- 30. 刪除「重複記錄」的最佳方法
恨在這裏再次轉發我的答案。請查看http:// stackoverflow。com/a/24387929/815600 – Sandy 2014-06-24 13:31:41