Преобразование DataRowCollection в IEnumerable


Я хотел бы сделать что-то подобное в .NET 3.5. Какой самый быстрый способ?

IEnumerable<DataRow> collection = 
    TypedDataSet.TypedTableBase<DataRow>.Rows as IEnumerable<DataRow>;
4 52

4 ответа:

предполагая, что вы используете .NET 4.0, который вводит ковариацию:

// Presumably your table is of some type deriving from TypedTableBase<T>,
// where T is an auto-generated type deriving from DataRow.
IEnumerable<DataRow> collection = myTypedTable;

The тип таблицы осуществляет IEnumerable<T> where T : DataRow.

В противном случае:

IEnumerable<DataRow> collection = myTypedTable.Cast<DataRow>();

можно назвать OfType<DataRow>() на DataRowCollection.

простое прямое решение заключается в использовании метода "Select()" системы.Данные.Объект DataTable, который производит " DataRow []". Из этого вы можете рассматривать как IEnumberable с помощью Linq, как показано ниже:

List<MyItem> items = dtItems.Select().Select(row => new MyItem(row)).ToList();

полезный список объектов для каждой строки.

существует встроенный метод расширения, если вы включаете System.Data.DataSetExtensions.dll в ваш проект, который добавляет AsEnumerable() метод.

IEnumerable<DataRow> collection = TypedDataSet.TypedTableBase<DataRow>.AsEnumerable();