Quelle est la meilleure façon de convertir une instance DataRowCollection en DataRow []?
DataRow[] rows = dt.Select();
En supposant que vous ayez toujours accès à la table de données.
Par souci d'exhaustivité, c'est une autre façon (avec Linq), et cela préserver l'ordre des lignes:
DataRow[] rows = dt.Rows.Cast<DataRow>().ToArray()
C'est assez évident, mais:
DataRowCollection.CopyTo(DataRow[] array, Int32 offset)
?
Il semble que, quoi qu'il arrive, vous devrez itérer la collection (CopyTo itère les éléments internes DataRowTree).
Je suppose que vous pouvez utiliser la réflexion pour accéder à l'arbre non public, mais à un coût important.
Si vous n'avez pas accès à la table contenante, vous pouvez utiliser la méthode d'extension:
public static class DataRowCollectionExtensions
{
public static IEnumerable<DataRow> AsEnumerable(this DataRowCollection source)
{
return source.Cast<DataRow>();
}
}
Et ensuite:
DataRow[] dataRows = dataRowCollection.AsEnumerable().ToArray();
Mais si vous avez accès à la table contenant, il est préférable d'accéder aux lignes en utilisant la méthode d'extension DataTable
AsEnumerable
( Description , Source ):
DataRow[] dataRows = dataTable.AsEnumerable().ToArray();
Dans tous les cas, vous pouvez utiliser la méthode DataTable
de Select
avec plusieurs surcharges ( Description , Source ):
DataRow[] dataRows = dataTable.Select();