Eliminar columnas de DataTable en C #

113

Tengo un DataSet del que obtengo un DataTable del que me están devolviendo una llamada de función. Tiene 15-20 columnas, sin embargo, solo quiero 10 columnas de datos.

¿Hay alguna manera de eliminar esas columnas que no quiero, copiar la tabla de datos a otra que solo tenga las columnas definidas que quiero o es mejor iterar la colección y usar las columnas que necesito?

Necesito escribir los valores en un archivo de datos de longitud fija.

Brian G
fuente
No tengo ningún control sobre el conjunto de datos que recibo. Lo único que sé es que lo contiene todo.
Brian G

Respuestas:

302

Además de limitar las columnas seleccionadas para reducir el ancho de banda y la memoria:

DataTable t;
t.Columns.Remove("columnName");
t.Columns.RemoveAt(columnIndex);
Tom Ritter
fuente
13
Solo para aclarar: esto también funciona cuando el DataTableya tiene filas existentes, no solo en un vacío DataTable.
Uwe Keim
23

Para eliminar todas las columnas después de la que desea, el siguiente código debería funcionar. Se eliminará en el índice 10 (recuerde que las columnas se basan en 0), hasta que el recuento de columnas sea 10 o menos.

DataTable dt;
int desiredSize = 10;

while (dt.Columns.Count > desiredSize)
{
   dt.Columns.RemoveAt(desiredSize);
}
Timothy Carter
fuente
1
solo mi 2c, no me gusta esta solución, trabajar con índices de columna conduce a un mantenimiento de pesadilla ..
Roberto
1
la pregunta incluye la siguiente declaración: "... las columnas definidas que quiero ...", de modo que eso significa que las columnas necesarias ni siquiera están necesariamente en orden secuencial, por lo que no se puede decir simplemente "Necesito las primeras 10 columnas". Como tal, la solución debe contener una matriz de nombres de columna que él desee, luego podemos eliminar todas las demás que no caigan en este conjunto de nombres "definido". Diferentes formas de implementar esto; desde un simple bucle foreach hasta una consulta o linq usando IN.
Roberto
3

La pregunta ya se ha marcado como respondida, pero supongo que la pregunta indica que la persona quiere eliminar varias columnas de un archivo DataTable.

Entonces, para eso, esto es lo que hice, cuando me encontré con el mismo problema.

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

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