c# performance datarow datarowcollection

c# - Convertir DataRowCollection en DataRow



performance (4)

¿Cuál es la mejor forma de convertir una instancia DataRowCollection en una DataRow []?


Esto es algo 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 la reflexión para acceder al árbol no público, pero a un costo significativo.


DataRow[] rows = dt.Select();

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


En aras de la exhaustividad, esta es otra forma (con Linq) y conserva el orden de las filas :

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


Si no ha accedido a la tabla que lo contiene, puede usar el método de extensión:

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

Y posteriormente:

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

Pero si tiene acceso a la tabla que lo contiene, es mejor acceder a las filas usando el método de extensión AsEnumerable DataTable ( Descripción , Fuente ):

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

De cualquier forma, puede usar el método Select DataTable con varias sobrecargas ( Descripción , Fuente ):

DataRow[] dataRows = dataTable.Select();