2008-10-22 7 views

Antwort

5

Dies ist ziemlich offensichtlich, aber:

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

Es scheint wie egal, Sie müssen die Sammlung durchlaufen (CopyTo iteriert die internen DataRowTree-Elemente).

Ich nehme an, Sie könnten Reflektion verwenden, um auf den nicht-öffentlichen Baum zuzugreifen, aber zu erheblichen Kosten.

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

Angenommen, Sie haben noch Zugriff auf die Datentabelle.

+6

einfachste Antwort, und richtig sind. Sollte als akzeptierte Antwort markiert sein. Diese Frage hat jetzt 3.500 Aufrufe! –

+1

Einverstanden Javaman59, ich habe eine Frage an einen Moderator zur Überprüfung gestellt. – si618

13

Aus Gründen der Vollständigkeit ist dies ein weiterer Weg (mit Linq), und es die Reihe der Bestellung erhalten:

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

Wenn Sie auf die enthaltende Tabelle zugreifen nicht, können Sie die Erweiterung verwenden können Methode:

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

Und danach:

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

Aber wenn Sie Zugriff auf die beinhaltenden Tabelle haben, ist es besser, den Zugriff auf Zeilen mit DataTable ‚s AsEnumerable Erweiterungsmethode (Description, Source):

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

Wie auch immer Sie DataTable verwenden können‘ s Select Verfahren mit mehreren Überlastungen (Description, Source):

DataRow[] dataRows = dataTable.Select();