web-dev-qa-db-fra.com

Convertir DataRowCollection en DataRow []

Quelle est la meilleure façon de convertir une instance DataRowCollection en DataRow []?

46
Jeff
DataRow[] rows = dt.Select();

En supposant que vous ayez toujours accès à la table de données.

96
Ely

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()
14
Nordin

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.

5
Jared

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 DataTableAsEnumerable ( 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();
5
Deilan