Преобразовать 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();