Rimuovere colonne da DataTable in C #


113

Ho un DataSet da cui ottengo un DataTable da cui mi viene restituito da una chiamata di funzione. Ha 15-20 colonne, tuttavia voglio solo 10 colonne di dati.

C'è un modo per rimuovere quelle colonne che non voglio, copiare DataTable in un altro che ha solo le colonne definite che voglio o è semplicemente meglio iterare la raccolta e usare solo le colonne di cui ho bisogno.

Ho bisogno di scrivere i valori su un file di dati di lunghezza fissa.


Non ho alcun controllo sul set di dati che ricevo. L'unica cosa che so è che contiene tutto.
Brian G,

Risposte:


302

Oltre a limitare le colonne selezionate per ridurre la larghezza di banda e la memoria:

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

13
Giusto per chiarire: funziona anche quando DataTableha già righe esistenti, non solo su un vuoto DataTable.
Uwe Keim

23

Per rimuovere tutte le colonne dopo quella desiderata, il codice seguente dovrebbe funzionare. Rimuoverà all'indice 10 (ricorda che le colonne sono basate su 0), fino a quando il conteggio delle colonne è 10 o meno.

DataTable dt;
int desiredSize = 10;

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

1
solo il mio 2c, non mi piace questa soluzione, lavorare con gli indici di colonna porta ad una manutenzione da incubo ..
Roberto

1
la domanda include la seguente affermazione: "..colonne definite che voglio .." quindi significa che le colonne necessarie non sono nemmeno necessariamente in ordine sequenziale, quindi non si può semplicemente dire "ho bisogno delle prime 10 colonne". In quanto tale, la soluzione deve contenere un array di nomi di colonna che desidera, quindi possiamo eliminare tutti gli altri che non rientrano in questo insieme "definito" di nomi. Diversi modi per implementarlo; dal semplice ciclo foreach a query o linq utilizzando IN.
Roberto

3

La domanda è già stata contrassegnata come risposta, ma immagino che la domanda affermi che la persona desidera rimuovere più colonne da un file DataTable.

Quindi, per questo, ecco cosa ho fatto, quando mi sono imbattuto nello stesso problema.

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

foreach (string ColName in ColumnsToBeDeleted)
{
    if (dt.Columns.Contains(ColName))
        dt.Columns.Remove(ColName);
}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.