Jaki jest najlepszy sposób na usunięcie zduplikowanych wpisów z tabeli danych?Najlepszy sposób na usunięcie zduplikowanych wpisów z tabeli danych
Odpowiedz
Usuń duplikaty
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;
}
Oto linki poniżej
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
Aby usunąć duplikaty w kolumnie
http://dotnetguts.blogspot.com/2007/02/removing-duplicate-records-from.html
: Jak mogę to zrobić dla wielu kolumn. Próbowałem użyć ciągu [] colName.But Table.Rows.Remove (dRow); zgłasza błąd taki jak "Podana dataRow nie jest w bieżącym DataRowCollection" .Proszę zasugerować. – user1495475
Konieczne byłoby stopniowe modyfikowanie foreach na większej liczbie poziomów. Jednak korzystanie z Linq może być łatwiejsze. http://stackoverflow.com/questions/8939516/how-to-find-duplicate-record-using-linq-from-datatable – miracules
Link z dotnetspark pracował dla mnie, ponieważ musiałem usunąć wiersze tylko wtedy, gdy wiersze 2 kolumn pasują do siebie Działa to jednak tylko dla jednego typu, ale dla mnie jest w porządku !! – DarkPh03n1X
Czy dtEmp
na aktualna DataTable pracy:
DataTable distinctTable = dtEmp.DefaultView.ToTable(/*distinct*/ true);
To miłe.
Ta odpowiedź zasługuje na więcej uwagi, była dokładnie tym, czego potrzebowałem i jest o wiele prostsza niż budowanie hashtable/dictionary/cokolwiek, o ile potrzebujesz tylko filtrować dokładne duplikaty. – lee
Należy uważać na wydajność tego rozwiązania. W mojej implementacji ToTable() był dość powolny, zabierając 30 razy więcej niż pierwotne zapytanie, które dostało dane. –
Ten fragment kodu jest taki, jaki chcę. Prosty i świetny. –
Herezje łatwy i szybki sposób za pomocą 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;
}
Dziękujemy za zamieszczenie odpowiedzi! Pamiętaj, aby uważnie przeczytać [FAQ na temat autopromocji] (http://stackoverflow.com/faq#promotion). Należy również pamiętać, że * wymagane * jest to, że publikujesz zrzeczenie się za każdym razem, gdy łączysz się z własną witryną/produktem. Dodaję tutaj ujawnienie; spróbuj o tym pamiętać na przyszłość! –
to bardzo wolno .. – LuckyS
Ten post dotyczy pobierania tylko Distincts wiersze z tabeli na podstawie danych z wielu kolumn.
Public coid removeDuplicatesRows(DataTable dt)
{
DataTable uniqueCols = dt.DefaultView.ToTable(true, "RNORFQNo", "ManufacturerPartNo", "RNORFQId", "ItemId", "RNONo", "Quantity", "NSNNo", "UOMName", "MOQ", "ItemDescription");
}
Musisz wywołać tę metodę i musisz przypisać wartość do datatable. W powyższym kodzie mamy RNORFQNo, PartNo, RFQ id, ItemId, RNONo, QUANTity, NSNNO, UOMName, MOQ i opis przedmiotu jako kolumnę, na której chcemy mieć różne wartości.
Dziękuję bardzo. Naprawdę pomaga :) Łatwe rozwiązanie – Rebecca
/* 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();
}
}
Istnieje prosty sposób użycia metody 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);
Zgaduję, że nie musisz grupować według licznika() == 1, bo inaczej otrzymasz wszystkie wiersze. –
prosty sposób może być:
var newDt= dt.AsEnumerable()
.GroupBy(x => x.Field<int>("ColumnName"))
.Select(y => y.First())
.CopyToDataTable();
całkowicie różne rzędy:
public static DataTable Dictinct(this dt) => dt.DefaultView.ToTable(true);
W odróżnieniu od danego rzędu (ów) (Zauważ, że kolumny wymienione w „distinctCulumnNames” zostaną zwrócone w Powstały DataTable):
public static DataTable Dictinct(this dt, params string[] distinctColumnNames) =>
dt.DefaultView.ToTable(true, distinctColumnNames);
W odróżnieniu od konkretnej kolumnie (zachowuje wszystkie kolumny w danej DataTable):
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();
}
}
można użyć Metoda DefaultView.ToTable z DataTable, aby wykonać filtrowanie w ten sposób (dostosuj do 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. Najbardziej skuteczny sposób na usunięcie wszystkich zduplikowanych wierszy z tabeli?
- 2. Jaki jest najlepszy sposób na usunięcie wiersza tabeli z jQuery?
- 3. Unikaj zduplikowanych wpisów podczas importowania danych za pomocą Zapisu Magicznego
- 4. Fundament zurb - wiele zduplikowanych wpisów CSS
- 5. Najlepszy sposób na usunięcie wszystkich elementów z tablicy ActionScript?
- 6. Jaki jest najlepszy sposób na usunięcie pierwszego elementu z tablicy?
- 7. Usuwanie zduplikowanych wierszy z tabeli
- 8. Najlepszy sposób przechowywania danych "ustawień witryny" w tabeli bazy danych?
- 9. Usuwanie zduplikowanych wierszy z tabeli BigQuery
- 10. wyodrębnianie z pliku tar o zduplikowanych nazwach wpisów
- 11. Jaki jest najlepszy sposób na usunięcie elementu tablicy w PHP?
- 12. Nauka Vima: Najlepszy sposób na usunięcie przestrzeni między słowami
- 13. najlepszy sposób na usunięcie parametru HttpServletRequest w kontrolerze/klasie?
- 14. Najlepszy sposób na przechowywanie danych w BoltDB
- 15. Najlepszy sposób filtrowania tabeli w React
- 16. Radzenie sobie ze zduplikowanych wpisów w AndroidStudio: java.util.zip.ZipException
- 17. Jaki jest najlepszy sposób zapisywania wpisów w dzienniku zdarzeń?
- 18. Najlepszy sposób na przechowywanie uporządkowanych list w bazie danych?
- 19. Najlepszy sposób na zaprojektowanie tego scenariusza bazy danych?
- 20. Najlepszy sposób na usunięcie std :: unique_ptr z wektora z surowym wskaźnikiem?
- 21. Jaki jest najlepszy sposób na aktualizację (lub zamianę) całej tabeli bazy danych na uruchomionym komputerze?
- 22. Najlepszy sposób na przechowywanie wielu flag w bazie danych
- 23. Piękny sposób na usunięcie zmiennych GET z PHP?
- 24. Jaki jest najlepszy sposób aktualizowania danych w tabeli, gdy jest ona używana bez blokowania tabeli?
- 25. auto przyrost po usunięcie z tabeli
- 26. Najlepszy sposób na buforowanie json
- 27. Najlepszy sposób na usunięcie ukośników ukośników w adresach URL z PHP
- 28. Najlepszy sposób na usunięcie elementu z tablicy bez zmiany jej rozmieszczenia
- 29. Jaki jest najlepszy sposób na usunięcie właściwości z zagnieżdżonego obiektu javascript?
- 30. Jaki jest najlepszy sposób na usunięcie wszystkich subviews z ciebie self.view?
Nienawidzę, aby ponownie udzielić odpowiedzi tutaj. Proszę również zajrzeć na http: // stackoverflow.com/a/24387929/815600 – Sandy