Какой лучший способ конвертировать экземпляр DataRowCollection в DataRow []?
Преобразование DataRowCollection в DataRow []
Ответ 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();