содержащий пару символов, которые сохраняются в переменныхchiиch2на каждом шаге циклического обращения к массиву во внутреннем оператореfrom.А в конечном итоге получается объект типаChrPair,содержащий все возможные сочетания извлекаемых символов.
Вложенные'операторыfromприменяются также для циклического обращения к источнику данных, который содержится в другом источнике данных. Соответствующий пример приведен в разделе "Применение оператораletдля создания временной переменной в запросе" далее в этой главе.
Группирование результатов с помощью оператора group
Одним из самых эффективных средств формирования запроса является операторgroup,поскольку он позволяет группировать полученные результаты по ключам. Используя последовательность сгруппированных результатов, можно без особого труда получить доступ ко всем данным, связанным с ключом. Благодаря этому свойству оператораgroupдоступ к данным, организованным в последовательности связанных элементов, осуществляется просто и эффективно. Операторgroupявляется одним из двух операторов, которыми может оканчиваться запрос. (Вторым оператором, завершающим запрос, являетсяselect.)Ниже приведена общая форма оператораgroup.
group
Этот оператор возвращает данные, сгруппированные в последовательности, причем каждую последовательность обозначает общий
Результатом выполнения оператораgroupявляется последовательность, состоящая из элементов типаIGrouping
Ниже приведен пример, демонстрирующий применение оператораgroup.В коде этого примера сначала объявляется массив, содержащий список веб-сайтов, а затем формируется запрос, в котором этот список группируется по имени домена самого верхнего уровня, например .orgили . сот.
// Продемонстрировать применение оператора group.
using System; using System.Linq;
class GroupDemo {
static void Main {
string[] websites = { "hsNameA.com", "hsNameB.net", "hsNameC.net", "hsNameD.com", "hsNameE.org", "hsNameF.org",
"hsNameG.tv", "hsNameH.net", "hsNamel.tv"
};
// Сформировать запрос на получение списка веб-сайтов,
// группируемых по имени домена самого верхнего уровня.
var webAddrs = from addr in websites
where addr.LastlndexOf('.') != -1