Аргумент метода запроса представляет собой метод, совместимый с указываемой формой делегатаFun с,но он не обязательно должен быть явно объявляемым методом. На самом деле вместо него чаще всего используется лямбда-выражение. Как пояснялось в главе 15, лямбда-выражение обеспечивает более простой, но эффективный способ определения того, что, по существу, является анонимным методом, а компилятор C# автоматически преобразует лямбда-выражение в форму, которая может быть передана в качестве параметра делегатуFun с.Благодаря тому что лямбда-выражения обеспечивают более простой и рациональный способ программирования, они используются во всех примерах, представленных далее в этом разделе.
Формирование запросов с помощью методов запроса
Используя методы запроса одновременно с лямбда-выражениями, можно формировать запросы, вообще не пользуясь синтаксисом, предусмотренным в C# для запросов. Вместо этого достаточно вызвать соответствующие методы запроса. Обратимся сначала к простому примеру. Он представляет собой вариант первого примера программы из этой главы, переделанный с целью продемонстрировать применение методов запросаWhere иSelect вместо соответствующих операторов.
// Использовать методы запроса для формирования простого запроса.
// Это переделанный вариант первого примера программы из настоящей главы.
using System; using System.Linq;
class SimpQuery {
static void Main {
int[] nums = { 1, -2, 3, О, -4, 5 };
// Использовать методы Where и Select для // формирования простого запроса.
var posNums = nums.Where(n => n > 0).Select(r => r);
Console.Write("Положительные значения из массива nums: ");
// Выполнить запрос и вывести его результаты, foreach(int i in posNums) Console.Write(i + " ") ;
Console.WriteLine ;
}
}
Эта версия программы дает такой же результат, как и исходная.
Положительные значения из массива nums: 13 5
Обратите особое внимание в данной программе на следующую строку кода.
var posNums = nums.Where(n => n > 0).Select(r => r);
В этой строке кода формируется запрос, сохраняемый в переменнойposNums.По этому запросу, в свою очередь, формируется последовательность положительных значений, извлекаемых из массиваnums.Для этой цели служит методWhere , отбирающий запрашиваемые значения, а также методSelect , избирательно формирующий из этих значений окончательный результат. МетодWhere может быть вызван для массиваnums,поскольку во всех массивах реализуется интерфейсIEnumerable