Массив классификации видов транспорта,



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; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!