Feedback

doppelte Zeilen aus DataTable löschen

Sprache: C#

Diese Methode löscht doppelte Zeilen aus einer DataTable.
/// <summary>
/// Removes duplicate rows in a DataTable.
/// </summary>
/// <param name="dataTable">The DataTable.</param> 
/// <param name="columnName">Name of the column</param>
private static void RemoveDuplicateRows(DataTable dataTable, string columnName) 
{
    Hashtable hashTable = new Hashtable();
    List<DataRow> duplicateList = new List<DataRow>();
    foreach (DataRow dataRow in dataTable.Rows)
        try
        {
            hashTable.Add(dataRow[columnName], string.Empty);
        }
        catch
        {
            duplicateList.Add(dataRow);
        }
    foreach (DataRow dataRow in duplicateList)
        dataTable.Rows.Remove(dataRow);
}
/// <summary>
/// Removes duplicate rows in a DataTable.
/// </summary>
/// <param name="dataTable">The DataTable.</param> 
/// <param name="columnName">Name of the column</param>
private static void RemoveDuplicateRows(DataTable dataTable, string columnName) 
{
    Hashtable hashTable = new Hashtable();
    List<DataRow> duplicateList = new List<DataRow>();
    foreach (DataRow dataRow in dataTable.Rows)
        try
        {
            hashTable.Add(dataRow[columnName], string.Empty);
        }
        catch
        {
            duplicateList.Add(dataRow);
        }
    foreach (DataRow dataRow in duplicateList)
        dataTable.Rows.Remove(dataRow);
}

2 Kommentare

  1. Bekantlicherweise sind Exceptions recht teuer, was Performance angeht, wäre eine Abfrage, ob bereits vorhanden nicht effektiver?

  2. Es ist ein weit verbreitetes Gerücht, dass Exceptions teuer sind. Relativ teuer sind sie allenfalls im Debug-Modus. Für den Releasemodus gilt das nicht. Was letztendlich schneller ist, hängt davon ab, wieviele Einträge doppelt sind, denn die Abfrage mit Contains kostet bei jedem Schleifendurchlauf zusätzlich, die Exception nur, wenn ein Eintrag doppelt ist.