Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Конспект лекций (C#).pdf
Скачиваний:
39
Добавлен:
25.03.2016
Размер:
2.43 Mб
Скачать

Для реализации метода, возвращающего результат, потребовалось создание именованного класса GS, т.к. метод не может возвращать данные анонимного типа.

9.3.6 Дополнительные методы интерфейса IEnumerable<T>

При построении запросов с помощью методов могут быть использованы и другие методы интерфейса IEnumerable<T>.

Пример: отсортировать людей в алфавитном порядке фамилий и взять в качестве результата первых трех человек (используется метод Take(int count)).

People[] Peoples = new People[6];

Peoples[0] = new People() { Surname = "Иванов", YearOfBirth = 1980, City = "Новокузнецк" };

Peoples[1] = new People() { Surname = "Петров", YearOfBirth = 1999, City = "Москва" };

Peoples[2] = new People() { Surname = "Иванов", YearOfBirth = 1971, City = "Псков" };

Peoples[3] = new People() { Surname = "Степанов", YearOfBirth = 1980, City = "Москва" };

Peoples[4] = new People() { Surname = "Антонов", YearOfBirth = 2001, City = "Новокузнецк" };

Peoples[5] = new People() { Surname = "Попов", YearOfBirth = 1980, City = "Новокузнецк" };

var Result = Peoples.OrderBy(p => p.Surname).Take(3); // Result = {[Антонов, 2001, Новокузнецк],

[Иванов, 1980, Новокузнецк], [Иванов, 1971, Псков]}

Список методов, их назначение и синтаксис можно узнать из справки по чле-

нам интерфейса IEnumerable<T>.

9.4 Совместное использование запросов и методов

Язык C# допускает одновременное использование как запросов, так и методов. Пример: упорядочить людей по году рождения, взять двух самых пожилых и

найти их средний возраст на начало 21 века (считать год рождения за целый год).

People[] Peoples = new People[6];

 

Peoples[0] = new People() { Surname = "Иванов", YearOfBirth =

1980,

City = "Новокузнецк" };

 

Peoples[1] = new People() { Surname = "Петров", YearOfBirth =

1999,

City = "Москва" };

 

Peoples[2] = new People() { Surname = "Иванов", YearOfBirth =

1971,

City = "Псков" };

 

Peoples[3] = new People() { Surname = "Степанов", YearOfBirth

= 1980,

City = "Москва" };

 

Peoples[4] = new People() { Surname = "Антонов", YearOfBirth = 2001, City = "Новокузнецк" };

169

Peoples[5] = new People() { Surname = "Попов", YearOfBirth = 1980, City = "Новокузнецк" };

var Result = (from p in Peoples orderby p.YearOfBirth

select p).Take(2).Average(p => 2001 - p.YearOfBirth);

//Result = 25,5

Вданном примере с помощью запроса люди были отсортированы по возрастанию года рождения, а далее с помощью методов отобраны первые два человека

({[Иванов, 1971, Псков], [Иванов, 1980, Новокузнецк]}), у каждого из них найден возраст на момент начала 21 века (p => 2001 - p.YearOfBirth) и по полученным значениям рассчитано среднее.

170