Массив классификации видов транспорта,
string[] travelTypes = {
"Воздушный",
"Морской",
"Наземный",
"Речной",
};
Массив видов транспорта.
Transport[] transports = {
new Transport("велосипед", "Наземный"),
new Transport ("аэростат", "Воздушный"),
new Transport("лодка", "Речной"),
new Transport("самолет", "Воздушный"),
new Transport("каноэ", "Речной"),
new Transport("биплан", "Воздушный"),
new Transport("автомашина", "Наземный"),
new Transport("судно", "Морской"),
new Transport("поезд", "Наземный")
};
Сформировать запрос, в котором групповое
Объединение используется для составления списка
Видов транспорта по соответствующим категориям,
var byHow = from how in travelTypes
join trans in transports
On how equals trans.How
Into lst
select new { How = how, Tlist = lst };
Выполнить запрос и вывести его результаты,
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 составляется список видов транспорта, относящихся к данной категории. Этот список сохраняется в переменной lst. И наконец, оператор 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 и реализуются в виде методов расширения функций обобщенной формы интерфейса IEnumerable<T>. (Методы запроса определяются также в классе System.Linq.Queryable, расширяющем функции обобщенной формы интерфейса IQueryable<T>, но этот интерфейс в настоящей главе не рассматривается.) Метод расширения дополняет функции другого класса, но без наследования. Поддержка методов расширения была внедрена в версию C# 3.0 и более подробно рассматривается далее в этой главе. А до тех пор достаточно сказать, что методы запроса могут вызываться только для тех объектов, которые реализуют интерфейс IEnumerable<T>.
|
|
В классе Enumerable предоставляется немало методов запроса, но основными считаются те методы, которые соответствуют описанным ранее операторам запроса. Эти методы перечислены ниже вместе с соответствующими операторами запроса. Следует, однако, иметь в виду, что эти методы имеют также перегружаемые формы, а здесь они представлены лишь в самой простой своей форме. Но именно эта их форма используется чаще всего.
Дата добавления: 2019-02-12; просмотров: 260; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!