2010-11-15 3 views
2

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

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

ответ

8

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"); 
+0

@Downvoter: Уход за комментарий? –

+0

+1: Спасибо, Джон. Итак ... Я полагаю, что этот метод AsEnumerable должен наложить некоторую стоимость; иначе класс будет реализовывать IEnumerable по умолчанию. Можете ли вы рассказать мне, что это такое? –

Смежные вопросы