Последовательность результатов, получаемых при выполнении запроса, хранящегося в переменнойwebAddrs,представляет собой список групп, поэтому для доступа к каждому члену группы требуются два циклаforeach.Доступ к каждой группе осуществляется во внешнем цикле, а члены внутри группы перечисляются во внутреннем цикле. Переменная шага внешнего циклаforeachдолжна быть экземпляром интерфейсаI Grouping,совместимым с ключом и типом элемента данных. В рассматриваемом здесь примере ключи и элементы данных относятся к типуstring.Поэтому переменнаяsitesшага внешнего цикла имеет типIGrouping,а переменнаяsiteшага внутреннего цикла — типstring.Ради краткости данного примера обе переменные объявляются неявно, хотя их можно объявить и явным образом, как показано ниже.

foreach(IGrouping sites in webAddrs) {

Console.WriteLine("Веб-сайты, сгруппированные " +

"по имени домена" + sites.Key); foreach(string site in sites)

Console.WriteLine("    " + site);

Console.WriteLine ();

}

Продолжение запроса с помощью оператора 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",

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

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