49

DataRowCollectionインスタンスをDataRow[]に変換するための最もパフォーマンスの高い方法は何ですか?

4

4 に答える 4

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

まだデータテーブルにアクセスできると仮定します。

于 2008-10-22T19:47:36.427 に答える
17

完全を期すために、これは別の方法 (Linq を使用) であり、行の順序を保持します。

DataRow[] rows = dt.Rows.Cast<DataRow>().ToArray()
于 2012-04-23T14:25:22.490 に答える
5

含まれているテーブルにアクセスできない場合は、拡張メソッドを使用できます。

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

その後:

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

ただし、含まれているテーブルにアクセスできる場合は、DataTableAsEnumerable拡張メソッド ( DescriptionSource )を使用して行にアクセスすることをお勧めします。

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

どちらの方法でも、複数のオーバーロード ( DescriptionSource )でDataTableのメソッドを使用できます。Select

DataRow[] dataRows = dataTable.Select();
于 2014-08-27T15:47:48.773 に答える
5

これは明らかですが、次のようになります。

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

何があっても、コレクションを反復する必要があるようです (CopyTo は内部の DataRowTree 要素を反復します)。

リフレクションを使用して非公開ツリーにアクセスできると思いますが、かなりのコストがかかります。

于 2008-10-22T19:46:18.177 に答える