La mejor forma de eliminar entradas duplicadas de una tabla de datos

¿Cuál es la mejor manera de eliminar entradas duplicadas de una tabla de datos?

Eliminar duplicados

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

Aquí enlaces a continuación

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

Para eliminar duplicados en la columna

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

Haga dtEmp en su DataTable de trabajo actual:

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

Es agradable.

Esta publicación se refiere a la obtención de solo filas Distincts de la tabla de datos en función de varias columnas.

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

Debe llamar a este método y debe asignarle valor a la tabla de datos. En el código anterior tenemos RNORFQNo, PartNo, RFQ id, ItemId, RNONo, cantidad, NSNNO, UOMName, MOQ y descripción del artículo como columna en la que queremos valores distintos.

Una manera simple sería:

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

Hay una manera simple de usar el método 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); 

Aquí es una manera fácil y rápida usando 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; } 

HAGA CLIC para visitar mi blog para más detalles

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

Puede usar el método DefaultView.ToTable de una DataTable para hacer el filtrado así (adaptarse a 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 

Filas completamente distintas:

 public static DataTable Dictinct(this dt) => dt.DefaultView.ToTable(true); 

Distinto por fila (s) particular (Tenga en cuenta que las columnas mencionadas en “distinctCulumnNames” se devolverán en DataTable resultante):

 public static DataTable Dictinct(this dt, params string[] distinctColumnNames) => dt.DefaultView.ToTable(true, distinctColumnNames); 

Distinto por columna particular (conserva todas las columnas en la tabla de datos dada):

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