2016-07-27 17 views
0

Guten Tag.Doppelte Spaltenzellenwerte von einer DataTable löschen

Der nächste Beitrag, den ich sah, war .

Ich habe eine Datentabelle mit den folgenden Informationen:

ID COL1 COL2 COL3 
10 ABC  Town Dog 
20 AAA  Town Dog 
30 BBB  Town Cat 
40 CCC  City Cat 
50 DDD  City Pig 

Ich mag die Spalten mit ähnlichem Wert löschen, so dass nur die erste Instanz jedem bleibt. Die Spalte Filter Benutzereingabe, dass es produzieren kann:

ID COL1 COL2 COL3    ID COL1 COL2 COL3 
10 ABC  Town Dog    10 ABC  Town Dog 
20 AAA    Dog    20 AAA  Town  
30 BBB    Cat  OR  30 BBB  Town Cat 
40 CCC  City Cat    40 CCC  City  
50 DDD    Pig    50 DDD  City Pig 

Bisher habe ich einen funktionierenden Code, aber es führt langsam.

foreach (string strListVal in lstUniqueString) //contains the unique values 
{ 
     foreach (DataRow drTableTraverse in dt.Rows) //match the string vs. all rows 
     { 
      if (drTableTraverse[strColumnName].ToString() == strListVal && bClearedFirst == false) 
      { 
       bClearedFirst = true; //flag for the first instance 
       continue; //skip the first instance, then clear the remaining 
      } 
      else if (drTableTraverse[strColName].ToString() == strListVal) 
      { 
       drTableTraverse[strColumnName] = ""; 
      } 
    } 
} 

Gibt es einen schnelleren Weg, um das gleiche Ergebnis zu erzielen? Ohne linq, wenn überhaupt.

+0

Wenn doppelte auftreten dann Sie als leerer Wert (leere Zeichenkette) gesetzt werden soll? –

+0

Ja, das ist richtig. Die Duplikate sind leere Zeichenfolgen, und die erste Instanz behält ihren Wert – valmanway

Antwort

0

dies scheint wie eine optimierte Lösung

foreach (string strListVal in lstUniqueString) 
{ 
    for (int i = 0; i < dt.Rows.Count; i++) 
    { 
     if (dt.Rows[i][strAttribute].ToString().Equals(strListVal) && bClearedFirst == false) 
     { 
      bClearedFirst = true; 
      continue; //should skip first instance 
     } 
     else if (dt.Rows[i][strAttribute].ToString().Equals(strListVal) && bClearedFirst == true) 
     { 
      dt.Rows[i][strAttribute] = DBNull.Value; 
     } 
    } 
    bClearedFirst = false; //reset 
} 
Verwandte Themen