2008-10-22 30 views

Respuesta

5

Esto es bastante obvio, pero:

DataRowCollection.CopyTo(DataRow[] array, Int32 offset)?

Parece que no importa qué, tendrá que iterar la colección (CopyTo repite los elementos internos de DataRowTree).

Supongo que podría usar el reflejo para acceder al árbol no público, pero a un costo significativo.

87
DataRow[] rows = dt.Select(); 

Suponiendo que todavía tiene acceso a la tabla de datos.

+6

respuesta más simple y correcta. Debe marcarse como la respuesta aceptada. ¡Esta pregunta ahora tiene 3.500 visitas! –

+1

Acordado Javaman59, he marcado una pregunta para que un moderador la revise. – si618

13

Para la mayor abundamiento, esta es otra manera (con LINQ), y preservar la fila ordenar:

DataRow[] rows = dt.Rows.Cast<DataRow>().ToArray() 
4

Si no tiene acceso a la tabla que contiene, es posible utilizar la extensión método:

public static class DataRowCollectionExtensions 
{ 
    public static IEnumerable<DataRow> AsEnumerable(this DataRowCollection source) 
    { 
     return source.Cast<DataRow>(); 
    } 
} 

Y a partir de entonces:

DataRow[] dataRows = dataRowCollection.AsEnumerable().ToArray(); 

Sin embargo, si tiene acceso a la tabla que contiene, es mejor filas de acceso que utilicen DataTable 's método AsEnumerable extensión (Description, Source):

DataRow[] dataRows = dataTable.AsEnumerable().ToArray(); 

De cualquier manera usted puede usar DataTable' Select método s con varias sobrecargas (Description, Source):

DataRow[] dataRows = dataTable.Select(); 
Cuestiones relacionadas