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();