Подтвердить что ты не робот

Преобразование DataRowCollection в DataRow []

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

4b9b3361

Ответ 1

DataRow[] rows = dt.Select();

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

Ответ 2

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

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

Ответ 3

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

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

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

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

Ответ 4

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

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

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

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

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

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

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

DataRow[] dataRows = dataTable.Select();