// Сформировать запрос, в котором групповое // объединение используется для составления списка
// видов транспорта по соответствующим категориям, var byHow = from how in travelTypes
join trans in transports on how equals trans.How into 1st
select new { How = how, Tlist = 1st };
// Выполнить запрос и вывести его результаты, foreach(var t in byHow) {
Console.WriteLine('К категории <{0} транспорт> относится:', t.How);
foreach(var m in t.Tlist)
Console.WriteLine(' ' + m.Name);
Console.WriteLine();
}
}
}
Ниже приведен результат выполнения этой программы.
К категории <Воздушный транспорт> относится: аэростат самолет биплан
К категории <Морской транспорт> относится: судно
К категории <Наземный транспорт> относится: велосипед автомашина поезд
К категории <Речной транспорт> относится: лодка каноэ
Главной частью данной программы, безусловно, является следующий запрос.
var byHow = from how in travelTypes
join trans in transports on how equals trans.How into 1st
select new { How = how, Tlist = 1st };
Этот запрос формируется следующим образом. В операторе from используется переменная диапазона how для охвата всего массива travelTypes. Напомним, что массив travelTypes содержит названия общих категорий транспорта: воздушного, наземного, морского и речного. Каждый вид транспорта объединяется в операторе join со своей категорией. Например, велосипед, автомашина и поез^объедйняются с наземным транспортом. Но благодаря оператору into для каждой категории транспорта в операторе join составляется список видов транспорта, относящихся к данной категории. Этот список сохраняется в переменной 1st. И наконец, оператор select возвращает объект анонимного типа, инкапсулирующий каждое значение переменной how (категории транспорта) вместе со списком видов транспорта. Именно поэтому для вывода результатов запроса требуются два цикла foreach.
foreach(var t in byHow) {
Console.WriteLine('К категории <{0} транспорт> относится:', t.How);
foreach(var m in t.Tlist)
Console.WriteLine(' ' + m.Name);
Console.WriteLine();
}
Во внешнем цикле получается объект, содержащий наименование общей категории транспорта, и список видов транспорта, относящихся к этой категории. А во внутреннем цикле выводятся отдельные виды транспорта.
Методы запроса
Синтаксис запроса, описанный в предыдущих разделах, применяется при формировании большинства запросов в С#. Он удобен, эффективен и компактен, хотя и не является единственным способом формирования запросов. Другой способ состоит в использовании
Основные методы запроса
Методы запроса определяются в классе System. Linq. Enumerable и реализуются в
В классе Enumerable предоставляется немало методов запроса, но основными считаются те методы, которые соответствуют описанным ранее операторам запроса. Эти методы перечислены ниже вместе с соответствующими операторами запроса. Следует, однако, иметь в виду, что эти методы имеют также перегружаемые формы, а здесь они представлены лишь в самой
