Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
40.doc
Скачиваний:
14
Добавлен:
30.04.2022
Размер:
646.66 Кб
Скачать

16.1. Простой запрос

В приведенной ниже программе используется запрос для получения положительных значений, содержащихся в массиве целых значений.

// Сформировать простой запрос LINQ.

using System;

using System.Linq;

class SimpQuery {

static void Main() {

int[] nums = { 1, -2, 3, 0, -4, 5 };

// Сформировать простой запрос на получение //только положительных значений,

var posNums = from n in nums

where n > 0

select n;

Console.Write("Положительные значения из массива nums: ");

//Выполнить запрос и отобразить его результаты.

foreach(int i in posNums) Console.Write(i + " ");

Console.WriteLine();

}

Все запросы начинаются с оператора from, определяющего два элемента. Первым из них является переменная диапазона, принимающая элементы из источника данных. В рассматриваемом примере эту роль выполняет переменная n. Вторым элементом является источник данных (в данном случае — массив nums). Тип переменной диапазона выводится из источника данных. Поэтому переменная n относится к типу int.

Ниже приведена общая форма оператора from.

from переменная_диапазона in источник_данных

Запрос может состоять из нескольких операторов frоm, которые оказываются в этом случае вложенными.

Далее следует оператор where, обозначающий условие, которому должен удовлетворять элемент в источнике данных, чтобы его можно было получить по запросу.

Ниже приведена общая форма синтаксиса оператора where.

where булево_выражение

В этой форме булево_выражение должно давать результат типа bool. Такое выражение иначе называется предикатом. В запросе можно указывать несколько операторов where.

Все запросы оканчиваются оператором select или group. В данном примере используется оператор select, точно определяющий, что именно должно быть получено по запросу. Оператор select завершается точкой с запятой, поскольку это последний оператор в запросе. Другие же его операторы не оканчиваются точкой с запятой.

Тип элемента, выбираемого оператором select, должен соответствовать типу аргумента, передаваемого форме интерфейса IEnumerable<T>, используемой для объявления переменной запроса. Зачастую при объявлении переменных запроса используется ключевое слово var вместо явного указания ее типа, поскольку это дает компилятору возможность самому вывести соответствующий тип данной переменной из оператора select. Такой подход оказывается особенно удобным в тех случаях, когда оператор select возвращает из источника данных нечто более существенное, чем отдельный элемент.

Оператор select может также возвращать отдельную часть значения переменной диапазона, результат выполнения некоторой операции или преобразования переменной диапазона и даже новый тип объекта, конструируемого из отдельных фрагментов информации, извлекаемой из переменной диапазона. Такое преобразование исходных данных называется проецированием.

Пример:

var sqrRoots = from n in nums

where n > 0

select Math.Sqrt(n);

16.2. Общая форма запроса

У всех запросов имеется общая форма, основывающаяся на ряде приведенных ниже контекстно-зависимых ключевых слов.

Ascending

by

descending

equals

from

group

in

into

join

let

on

orderby

select

where

Среди них лишь приведенные ниже ключевые слова используются в начале операторов запроса.

from

group

join

let

orderby

select

where

Запрос должен начинаться с ключевого слова from и оканчиваться ключевым словом select или group. Оператор select определяет тип значения, перечисляемого по запросу, а оператор group возвращает данные группами, причем каждая группа может перечисляться по отдельности. В операторе where указываются критерии, которым должен удовлетворять искомый элемент, чтобы быть полученным по запросу. А остальные операторы позволяют уточнить запрос.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]