Преобразовать DataRowCollection в IEnumerable <T> - PullRequest
57 голосов
/ 12 февраля 2011

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

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

Ответы [ 4 ]

78 голосов
/ 12 февраля 2011

Вы можете позвонить OfType<DataRow>() на DataRowCollection.

65 голосов
/ 12 февраля 2011

Если вы используете .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;

Сам тип таблицы реализует IEnumerable<T> where T : DataRow.

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

IEnumerable<DataRow> collection = myTypedTable.Cast<DataRow>();
3 голосов
/ 09 января 2017

Простым прямым решением является использование метода «Select ()» объекта System.Data.DataTable, который создает «DataRow []».Из этого вы можете обращаться с IEnumberable, используя Linq, как показано ниже:

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

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

0 голосов
/ 11 октября 2017

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

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