Преобразовать DataRowCollection в DataRow [] - PullRequest
46 голосов
/ 22 октября 2008

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

Ответы [ 4 ]

96 голосов
/ 22 октября 2008
DataRow[] rows = dt.Select();

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

14 голосов
/ 23 апреля 2012

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

DataRow[] rows = dt.Rows.Cast<DataRow>().ToArray()
5 голосов
/ 27 августа 2014

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

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

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

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

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

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

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

DataRow[] dataRows = dataTable.Select();
5 голосов
/ 22 октября 2008

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

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

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

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

...