Entfernen Sie Spalten aus DataTable in C #

112

Ich habe ein DataSet, von dem ich eine DataTable erhalte, von der ich von einem Funktionsaufruf zurückgegeben werde. Es hat 15-20 Spalten, aber ich möchte nur 10 Spalten der Daten.

Gibt es eine Möglichkeit, die nicht gewünschten Spalten zu entfernen, die Datentabelle in eine andere zu kopieren, in der nur die gewünschten Spalten definiert sind, oder ist es besser, die Sammlung zu iterieren und nur die benötigten Spalten zu verwenden.

Ich muss die Werte in eine Datendatei mit fester Länge schreiben.

Brian G.
quelle
Ich habe keine Kontrolle über den Datensatz, den ich erhalte. Ich weiß nur, dass es alles enthält.
Brian G

Antworten:

301

Abgesehen von der Begrenzung der ausgewählten Spalten zur Reduzierung von Bandbreite und Speicher:

DataTable t;
t.Columns.Remove("columnName");
t.Columns.RemoveAt(columnIndex);
Tom Ritter
quelle
13
Nur zur Verdeutlichung: Dies funktioniert auch, wenn die DataTablebereits vorhandenen Zeilen nicht nur leer sind DataTable.
Uwe Keim
23

Um alle Spalten nach der gewünschten zu entfernen, sollte der folgende Code funktionieren. Es wird bei Index 10 entfernt (denken Sie daran, dass Spalten auf 0 basieren), bis die Spaltenanzahl 10 oder weniger beträgt.

DataTable dt;
int desiredSize = 10;

while (dt.Columns.Count > desiredSize)
{
   dt.Columns.RemoveAt(desiredSize);
}
Timothy Carter
quelle
1
Nur meine 2c, ich mag diese Lösung nicht, die Arbeit mit Spaltenindizes führt zur Alptraumwartung.
Roberto
1
Die Frage enthält die folgende Aussage: "..spalten definiert, dass ich möchte ..", was bedeutet, dass die benötigten Spalten nicht unbedingt in sequentieller Reihenfolge sind, sodass man nicht einfach sagen kann "Ich brauche die ersten 10 Spalten". Als solche muss die Lösung ein Array von Spaltennamen enthalten, die er möchte, dann können wir alle anderen eliminieren, die nicht in diesen "definierten" Satz von Namen fallen. Verschiedene Möglichkeiten, dies umzusetzen; von der einfachen foreach-Schleife bis zur Abfrage oder linq mit IN.
Roberto
3

Die Frage wurde bereits als beantwortet markiert, aber ich denke, die Frage besagt, dass die Person mehrere Spalten aus a entfernen möchte DataTable.

Deshalb habe ich Folgendes getan, als ich auf dasselbe Problem stieß.

string[] ColumnsToBeDeleted = { "col1", "col2", "col3", "col4" };

foreach (string ColName in ColumnsToBeDeleted)
{
    if (dt.Columns.Contains(ColName))
        dt.Columns.Remove(ColName);
}
SU7
quelle