Последовательность результатов, получаемых при выполнении запроса, хранящегося в переменнойwebAddrs,представляет собой список групп, поэтому для доступа к каждому члену группы требуются два циклаforeach.Доступ к каждой группе осуществляется во внешнем цикле, а члены внутри группы перечисляются во внутреннем цикле. Переменная шага внешнего циклаforeachдолжна быть экземпляром интерфейсаI Grouping,совместимым с ключом и типом элемента данных. В рассматриваемом здесь примере ключи и элементы данных относятся к типуstring.Поэтому переменнаяsitesшага внешнего цикла имеет типIGrouping
foreach(IGrouping
Console.WriteLine("Веб-сайты, сгруппированные " +
"по имени домена" + sites.Key); foreach(string site in sites)
Console.WriteLine(" " + site);
Console.WriteLine ();
}
Продолжение запроса с помощью оператора into
При использовании в запросе оператораselectилиgroupиногда требуется сформировать временный результат, который будет служить
into
где
ПРИМЕЧАНИЕ
Существует также форма оператора 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",