гдеTResultобозначает тип результата, который дает делегат, аТ— тип элемента. В методах запроса аргументыselector,predicateилиkeySelectorопределяют действие, которое предпринимает метод запроса. Например, в методеWhere() аргументpredicateопределяет порядок отбора данных в запросе. Каждый метод запроса возвращает перечислимый объект. Поэтому результат выполнения одного метода запроса можно использовать для вызова другого, соединяя эти методы в цепочку.

МетодJoin() принимает четыре аргумента. Первый аргумент(inner)представляет собой ссылку на вторую объединяемую последовательность, а первой является последовательность, для которой вызывается методJoin (). Селектор ключа для первой последовательности передается в качестве аргументаouterKeySelector,аселектор ключа для второй последовательности — в качестве аргументаinnerKeySelector.Результат объединения обозначается как аргументresultSelector.АргументouterKeySelectorимеет типFunc,ТКеу>,аргументinnerKeySelector— типFunc,ТКеу>,тог^а как аргументresultSelector— типFunc,гдеTOuter— тип элемента из вызывающей последовательности;Tinner— тип элемента из передаваемой последовательности;TResult— тип элемента из объединяемой в итоге последовательности, возвращаемой в виде перечислимого объекта.

Аргумент метода запроса представляет собой метод, совместимый с указываемой формой делегатаFun с,но он не обязательно должен быть явно объявляемым методом. На самом деле вместо него чаще всего используется лямбда-выражение. Как пояснялось в главе 15, лямбда-выражение обеспечивает более простой, но эффективный способ определения того, что, по существу, является анонимным методом, а компилятор C# автоматически преобразует лямбда-выражение в форму, которая может быть передана в качестве параметра делегатуFun с.Благодаря тому что лямбда-выражения обеспечивают более простой и рациональный способ программирования, они используются во всех примерах, представленных далее в этом разделе.

Формирование запросов с помощью методов запроса

Используя методы запроса одновременно с лямбда-выражениями, можно формировать запросы, вообще не пользуясь синтаксисом, предусмотренным в C# для запросов. Вместо этого достаточно вызвать соответствующие методы запроса. Обратимся сначала к простому примеру. Он представляет собой вариант первого примера программы из этой главы, переделанный с целью продемонстрировать применение методов запросаWhere() иSelect() вместо соответствующих операторов.

// Использовать методы запроса для формирования простого запроса.

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

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