Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Продолжение запроса с помощью оператора into






При использовании в запросе оператора select или group иногда требуется сфор­ мировать временный результат, который будет служить продолжением запроса для по­ лучения окончательного результата. Такое продолжение осуществляется с помощью оператора into в комбинации с оператором select или group. Ниже приведена об­ щая форма оператора into:

into имя тело_запроса

где имя обозначает конкретное имя переменной диапазона, используемой для ци­ клического обращения к временному результату в продолжении запроса, на которое указывает тело_запроса. Когда оператор into используется вместе с оператором select или group, то его называют продолжением запроса, поскольку он продолжает запрос. По существу, продолжение запроса воплощает в себе принцип построения нового запроса по результатам предыдущего.

ПРИМЕЧАНИЕ Существует также форма оператора into, предназначенная для использования вместе с оператором join, создающим групповое объединение, о котором речь пойдет далее в этой главе.

Ниже приведен пример программы, в которой оператор into используется вместе с оператором group. Эта программа является переработанным вариантом предыду­ щего примера, в котором список веб-сайтов формируется по имени домена самого верхнего уровня. А в данном примере первоначальные результаты запроса сохраня­ ются в переменной диапазона ws и затем отбираются для исключения всех групп, со­ стоящих менее чем из трех элементов.

// Использовать оператор into вместе с оператором group.

using System;

using System.Linq;

 

class IntoDemo {

static void Main() {

string[] websites = { " hsNameA.com", " hsNameB.net", " hsNameC.net",

" hsNameD.com", " hsNameE.org", " hsNameF.org",

" hsNameG.tv", " hsNameH.net", " hsNameI.tv"

};

 

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

// по имени домена самого верхнего уровня, но выбрать только те

// группы, которые состоят более чем из двух членов.

// Здесь ws — это переменная диапазона для ряда групп,

// возвращаемых при выполнении первой половины запроса.

var webAddrs = from addr in websites

where addr.LastIndexOf('.')! = -1

group addr by addr.Substring(addr.LastIndexOf('.'))

into ws

where ws.Count() > 2

select ws;

 

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

Console.WriteLine(" Домены самого верхнего уровня " +

" с более чем двумя членами.\n");

 

foreach(var sites in webAddrs) {

Console.WriteLine(" Содержимое домена: " + sites.Key);

foreach(var site in sites)

Console.WriteLine(" " + site);

Console.WriteLine();

}

}

}

Эта программа дает следующий результат:

Домены самого верхнего уровня с более чем двумя членами.

 

Содержимое домена:.net

hsNameB.net

hsNameC.net

hsNameH.net

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

Обратите особое внимание в данном примере программы на следующую последо­ вательность операторов в формируемом запросе.

group addr by addr.Substring(addr.LastIndexOf('.'))

into ws

where ws.Count() > 2

select ws;

Сначала результаты выполнения оператора group сохраняются как временные для последующей обработки оператором where. В качестве переменной диапазона в данный момент служит переменная ws. Она охватывает все группы, возвращаемые оператором group. Затем результаты запроса отбираются в операторе where с таким расчетом, чтобы в конечном итоге остались только те группы, которые содержат боль­ ше двух членов. Для этой цели вызывается метод Count(), который является мето­ дом расширения и реализуется для всех объектов типа IEnumerable. Он возвращает количество элементов в последовательности. (Подробнее о методах расширения речь пойдет далее в этой главе.) А получающаяся в итоге последовательность групп возвра­ щается оператором select.






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.