Преобразовать DataRowCollection в DataRow[]

Каков наилучший способ преобразования экземпляра DataRowCollection в DataRow[]?

4 ответа

DataRow[] rows = dt.Select();

Предполагая, что у вас все еще есть доступ к данным.

Для полноты, это другой способ (с Linq), и он сохраняет порядок строк:

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

Это отчасти очевидно, но:

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

Кажется, что несмотря ни на что, вам придется выполнять итерацию коллекции (CopyTo выполняет итерацию внутренних элементов DataRowTree).

Я полагаю, вы могли бы использовать отражение для доступа к непубличному дереву, но за значительную цену.

Если у вас нет доступа к содержащей таблице, вы можете использовать метод расширения:

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

И после этого:

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

Но если у вас есть доступ к содержащей таблице, лучше получить доступ к строкам, используя DataTable"s AsEnumerable метод расширения ( описание, источник):

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

В любом случае вы можете использовать DataTable"s Select метод с несколькими перегрузками ( описание, источник):

DataRow[] dataRows = dataTable.Select();
Другие вопросы по тегам