// Это переделанный вариант первого примера программы из настоящей главы.

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().

// Это переработанный вариант примера, представленного ранее // для демонстрации синтаксиса запросов.

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

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