// Это переделанный вариант первого примера программы из настоящей главы.
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
Формально методSelect() в рассматриваемом здесь примере не нужен, поскольку это простой запрос. Ведь последовательность, возвращаемая методомWhere (), уже содержит конечный результат. Но окончательный выбор можно сделать и по более сложному критерию, как это было показано ранее на примерах использования синтаксиса запросов. Так, по приведенному ниже запросу из массиваnumsвозвращаются положительные значения, увеличенные на порядок величины.
var posNums = nums.Where(n => n > 0) .Select (r => r * 10);
Как и следовало ожидать, в цепочку можно объединять и другие операции над данными, получаемыми по запросу. Например, по следующему запросу выбираются положительные значения, которые затем сортируются по убывающей и возвращаются в виде результирующей последовательности:
var posNums = nums.Where(n => n > 0).OrderByDescending(j => j);
где выражениеj=>jобозначает, что упорядочение зависит от входного параметра, который является элементом данных из последовательности, получаемой из методаWhere().
В приведенном ниже примере демонстрируется применение метода запросаGroupBy (). Это измененный вариант представленного ранее примера.
// Продемонстрировать применение метода запроса GroupBy().
// Это переработанный вариант примера, представленного ранее // для демонстрации синтаксиса запросов.