Почему у DataTable.Rows нет метода .Where ()? - PullRequest
2 голосов
/ 15 ноября 2010

Мне нравится синтаксис, предлагаемый методом .Where(), доступным для многих коллекций.Тем не менее, я заметил, что он явно отсутствует в некоторых коллекциях.

Я уверен, что это связано с тем, какой интерфейс реализован или не реализован, но помимо этого, я хотел бы знать, почему мынет метода .Where() для DataTable.Rows

1 Ответ

8 голосов
/ 15 ноября 2010

DataRowCollection только реализует IEnumerable, а не IEnumerable<DataRow>.

Существует метод расширения - DataTableExtensions.AsEnumerable - для эффективного «исправления» этого.Вы также можете просто позвонить table.Cast<DataRow>(), но EnumerableRowCollection, возвращаемый AsEnumerable, имеет немного больше функциональности.

Так что вы можете написать:

var query = from row in table.AsEnumerable()
            where ...
            select ...;

В DataRowExtensions есть и другие полезные методы расширения, прежде всего Field, поэтому вы можете написать:

var query = from row in table.AsEnumerable()
            where row.Field<int>("Age") > 18
            select row.Field<string>("Name");
...