![]() Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Продолжение запроса с помощью оператора 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.
|