Во внешнем цикле получается объект, содержащий наименование общей категории транспорта, и список видов транспорта, относящихся к этой категории. А во внутреннем цикле выводятся отдельные виды транспорта.

Методы запроса

Синтаксис запроса, описанный в предыдущих разделах, применяется при формировании большинства запросов в С#. Он удобен, эффективен и компактен, хотя и не является единственным способом формирования запросов. Другой способ состоит в использованииметодов запроса, которые могут вызываться для любого перечислимого объекта, например массива.

Основные методы запроса

Методы запроса определяются в классеSystem. Linq. Enumerableи реализуются ввиде методов расширенияфункций обобщенной формы интерфейсаIEnumerable.(Методы запроса определяются также в классеSystem. Linq. Queryable,расширяющем функции обобщенной формы интерфейсаIQueryable,но этот интерфейс в настоящей главе не рассматривается.) Метод расширения дополняет функциидругогокласса, но без наследования. Поддержка методов расширения была внедрена в версию C# 3.0 и более подробно рассматривается далее в этой главе. А до тех пор достаточно сказать, что методы запроса могут вызываться только для тех объектов, которые реализуют интерфейсIEnumerable.

В классеEnumerableпредоставляется немало методов запроса, но основными считаются те методы, которые соответствуют описанным ранее операторам запроса. Эти методы перечислены ниже вместе с соответствующими операторами запроса. Следует, однако, иметь в виду, что эти методы имеют также перегружаемые формы, а здесь они представлены лишь в самой простой своей форме. Но именно эта их форма используется чаще всего.    v

Оператор запроса

Эквивалентный метод запроса

select

Select(selector)

where

Where(predicate)

orderby

OrderBy(keySelector)или OrderByDescending(keySelector)

join

Join(inner, outerKeySelector, innerKeySelector, resultSelector)

group

GroupBy(keySelector)

За исключением методаJoin(), остальные методы запроса принимают единственный аргумент, который представляет собой объект некоторой разновидности обобщенного типаFuncЭто тип встроенного делегата, объявляемый следующим образом:

delegate TResult Funccin Т, out TResult>(Т arg)

Перейти на страницу:

Похожие книги