2008-10-22 20 views

Répondre

5

C'est un peu évident, mais:

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

Il semble que quoi qu'il en soit, vous allez devoir parcourir la collection (CopyTo itère les éléments internes DataRowTree).

Je suppose que vous pourriez utiliser la réflexion pour accéder à l'arborescence non publique, mais à un coût significatif.

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

En supposant que vous avez toujours accès au datatable.

+6

réponse la plus simple et correcte. Devrait être marqué comme la réponse acceptée. Cette question a maintenant 3.500 vues! –

+1

D'accord Javaman59, j'ai signalé une question à un modérateur à examiner. – si618

13

Par souci d'exhaustivité, cela est une autre façon (avec Linq), et conserver la ligne de commande:

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

Si vous avez pas accès à la table contenant, vous pouvez utiliser l'extension méthode:

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

Et par la suite:

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

Mais si vous avez accès à la table contenant, il est préférable de lignes d'accès en utilisant la « méthode d'extension de AsEnumerable (Description, Source):

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

De toute façon, vous pouvez utiliser DataTable » DataTable méthode de Select avec plusieurs surcharges (Description, Source):

DataRow[] dataRows = dataTable.Select();