Usuń kolumny z DataTable w C #


113

Mam zestaw danych, z którego otrzymuję DataTable, z którego jestem przekazywany z wywołania funkcji. Ma 15-20 kolumn, ale chcę tylko 10 kolumn danych.

Czy istnieje sposób, aby usunąć te kolumny, których nie chcę, skopiować DataTable do innej, która ma tylko zdefiniowane kolumny, które chcę, czy po prostu lepiej jest iterować kolekcję i po prostu używać potrzebnych kolumn.

Muszę zapisać wartości do pliku danych o stałej długości.


Nie mam żadnej kontroli nad zbiorem danych, który otrzymuję. Wiem tylko, że zawiera wszystko.
Brian G,

Odpowiedzi:


302

Oprócz ograniczenia liczby kolumn wybranych w celu zmniejszenia przepustowości i pamięci:

DataTable t;
t.Columns.Remove("columnName");
t.Columns.RemoveAt(columnIndex);

13
Dla wyjaśnienia: Działa to również, gdy DataTablema już istniejące wiersze, nie tylko na pustym DataTable.
Uwe Keim

23

Aby usunąć wszystkie kolumny po tej, którą chcesz, poniższy kod powinien działać. Zostanie usunięty przy indeksie 10 (pamiętaj, że kolumny są oparte na 0), dopóki liczba kolumn nie wyniesie 10 lub mniej.

DataTable dt;
int desiredSize = 10;

while (dt.Columns.Count > desiredSize)
{
   dt.Columns.RemoveAt(desiredSize);
}

1
tylko mój 2c, nie podoba mi się to rozwiązanie, praca z indeksami kolumn prowadzi do koszmaru konserwacji ..
Roberto

1
pytanie zawiera następujące stwierdzenie: „..kolumny zdefiniowane, które chcę…”, co oznacza, że ​​potrzebne kolumny nie muszą być nawet w kolejności sekwencyjnej, więc nie można po prostu powiedzieć „potrzebuję pierwszych 10 kolumn”. Jako takie rozwiązanie musi zawierać tablicę nazw kolumn, które chce, wtedy możemy wyeliminować wszystkie inne, które nie mieszczą się w tym „zdefiniowanym” zestawie nazw. Różne sposoby realizacji tego; od prostej pętli foreach do zapytania lub linq używając IN.
Roberto

3

Pytanie zostało już oznaczone jako odpowiedź, ale wydaje mi się, że pytanie mówi, że osoba chce usunąć wiele kolumn z pliku DataTable.

A więc oto, co zrobiłem, kiedy napotkałem ten sam problem.

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

foreach (string ColName in ColumnsToBeDeleted)
{
    if (dt.Columns.Contains(ColName))
        dt.Columns.Remove(ColName);
}
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.