2008-09-16 132 views
82

Tengo un DataSet del que obtengo una DataTable de la que recibo de una llamada de función. Tiene 15-20 columnas, sin embargo, solo quiero 10 columnas de los datos.Eliminar columnas de DataTable en C#

Hay una forma de eliminar aquellas columnas que no quiero, copie el DataTable a otro que tenga solo las columnas definidas que quiero o simplemente es mejor iterar la colección y simplemente usar las columnas que necesito.

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

+0

No tengo control sobre el conjunto de datos que recibo. Lo único que sé es que contiene todo. –

Respuesta

217

Aparte de la limitación de las columnas seleccionadas para reducir el ancho de banda y la memoria:

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

Solo para aclarar: Esto también funciona cuando el 'DataTable' ya tiene filas existentes, no solo en un' DataTable' vacío. –

21

Para eliminar todas las columnas después de la que usted desea, esta pequeña función debe trabajar. Se eliminará en el índice 10 (recuerde que las columnas están basadas 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); 
     } 
+0

solo mi 2c, no me gusta esta solución, trabajar con índices de columna lleva a mantenimiento de pesadilla ... – batman

+0

@batman ¿cómo lo escribirías? – Muflix

+0

la pregunta incluye la siguiente afirmación: "..columns define que quiero ...", por lo 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 un conjunto de nombres de columna que él quiere, luego podemos eliminar todos los demás que no caigan en este conjunto de nombres "definidos". Diferentes formas de implementar esto; de simple foreach loop a query o linq usando IN. – batman

Cuestiones relacionadas