static void Main() {

string[] websites = { 'hsNameA.com', 'hsNameB.net', 'hsNameC.net', 'hsNameD.com', 'hsNameE.org', 'hsNameF.org',

'hsNameG.tv', 'hsNameH.net', 'hsNamel.tv'

};

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

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

// возвращаемых при выполнении первой половины запроса, var webAddrs = from addr in websites

where addr.LastlndexOf(1.1)    != -1

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

into ws where ws.Count() > 2 select ws;

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

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

'с более чем двумя членами.п');

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.LastlndexOf('.'))

into ws where ws.Count() > 2 select ws;

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

Применение оператора let для создания временной переменной в запросе

Иногда возникает потребность временно сохранить некоторое значение в самом запросе. Допустим, что требуется создать переменную перечислимого типа, которую можно будет затем запросить, или же сохранить некоторое значение, чтобы в дальнейшем использовать его в операторе where. Независимо от преследуемой цели, эти виды функций могут быть осуществлены с помощью оператора let. Ниже приведена общая форма оператора let:

let имя = выражение

где имя обозначает идентификатор, получающий значение, которое дает выражение. Тип имени выводится из типа выражения.

В приведенном ниже примере программы демонстрируется применение оператора let для создания еще одного перечислимого источника данных. В качестве входных данных в запрос вводится массив символьных строк, которые затем преобразуются в массивы типа char. Для этой цели служит еще один метод обработки строк, называемый ToCharArray () и возвращающий массив, содержащий символы в строке. Полученный результат присваивается переменной chrArray, которая затем используется во вложенном операторе from для извлечения отдельных символов из массива. И наконец, полученные символы сортируются в запросе, и из них формируется результирующая последовательность.

Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ИЗБРАННОЕ

0

Вы можете отметить интересные вам фрагменты текста, которые будут доступны по уникальной ссылке в адресной строке браузера.

Отметить Добавить цитату