Лучший способ удалить повторяющиеся записи из таблицы данных

Каков наилучший способ удалить повторяющиеся записи из таблицы данных?

Удалить дубликаты

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

Сделайте dtEmp в текущем рабочем DataTable:

 DataTable distinctTable = dtEmp.DefaultView.ToTable( /*distinct*/ true); 

Мило.

Это сообщение касается выбора только строк Distincts из таблицы Data на основе нескольких столбцов.

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

Вы должны вызвать этот метод, и вам нужно присвоить значение datatable. В вышеприведенном коде мы имеем RNORFQNo, PartNo, RFQ id, ItemId, RNONo, Quantity, NSNNO, UOMName, MOQ и Item Description в качестве столбца, в котором мы хотим отличные значения.

Простым способом было бы:

  var newDt= dt.AsEnumerable() .GroupBy(x => x.Field("ColumnName")) .Select(y => y.First()) .CopyToDataTable(); 

Существует простой способ использования Linq GroupBy Method.

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

Это простой и быстрый способ использования 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; } 

ЩЕЛКНИТЕ, чтобы посетить мой блог для более подробной информации

  /* 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(); } } 

Вы можете использовать метод DefaultView.ToTable для DataTable, чтобы сделать такую ​​фильтрацию (адаптироваться к 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 

Полностью разные строки:

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

Определяется конкретным столбцом (сохраняет все столбцы в заданном DataTable):

 public static void Distinct(this DataTable dataTable, string distinctColumnName) { var distinctResult = new DataTable(); distinctResult.Merge( .GroupBy(row => row.Field(distinctColumnName)) .Select(group => group.First()) .CopyToDataTable() ); if (distinctResult.DefaultView.Count < dataTable.DefaultView.Count) { dataTable.Clear(); dataTable.Merge(distinctResult); dataTable.AcceptChanges(); } } 
Давайте будем гением компьютера.