Программирование >>  Программирование с использованием ajax 

1 ... 273 274 275 [ 276 ] 277 278 279 ... 396


Затем печатаются результаты с небольшой долей форматирующего кода для отображения данных с заголовками столбцов и некоторыми разделителями между суммами и именами групп:

Console.WriteLine( BceroXt: Пo\nпpoдaж\t: региону\п------\t ------- );

foreach (var item in orderedResults) (

Console.WriteLine(item.TotalSales + \t: + item.Region); };

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

Take и Skip

Предположим, что нужно найти первые пять заказчиков по уровню продаж в существующем наборе данных. Вы не знаете заранее, какое количество продаж позволит включить заказчика в группу из пяти передовиков , поэтому вы не можете использовать условие where для их поиска.

Некоторые базы данных SQL, такие как Microsoft SQL Server, реализуют операцию ТОР, так что можно выдать команду вроде SELECT ТОР 5 FROM. . ., чтобы получить первые пять заказчиков.

LINQ-эквивалент этой операции представлен методом Take (), который принимает первые п результатов в выводе запроса. При практическом применении это должно быть скомбинировано с orderby для получения первых п результатов. Однако применять orderby не обязательно, поскольку могут быть ситуации, когда заранее известно, что данные уже находятся в нужном порядке, или же когда по каким-то причинам необходимо получить первые п результатов, не заботясь об их порядке.

Противоположностью Take () является метод Skip (), который пропускает первые п результатов, возвращая остальные. Take () и Skip () называют в документации LINQ разбивающими операциями (partitioning operators), потому что они разбивают результирующий набор на первые п результатов (Take ()) и/или остальные (Skip ()).

Практическое занятие PqQqjq с Take И Skip

Выполните следующие шаги для создания примера в Visual С# 2008.

1. Создайте новое консольное приложение по имени 26-13-TakeAndSkip в каталоге С:\BegVCSharp\Chapter2 6.

2. Скопируйте код создания класса Customer и инициализации списка customers (List<Customer> customers) из примера 2 6-7-QueryComplexObjects.

3. В методе Main () вслед за инициализацией списка customers введите следующий запрос:

Синтаксис запроса var queryResults =

from с in customers

orderby с.Sales descending

select new { c.ID, c.City, c.Country, c.Sales }



4. Введите два цикла обработки результатов, один с использованием Take (), а другой - с применением Skip ():

Console.WriteLine( Верхняя пятерка заказчиков по результатам продаж );

foreach (var item in queryResults.Take(5))

Console.WriteLine(item);

Console.WriteLine( Заказчики, не вошедшие в верхнюю пятерку );

foreach (var item in queryResults.Skip(5))

Console.WriteLine(item);

5. Откомпилируйте и выполните программу. Вы увидите пять ведущих заказчиков и затем остальных заказчиков, как показано ниже:

Верхняя пятерка заказчиков по результатам продаж

{ ID = А, City = New York, Country = USA, Sales = 9999 }

{ ID = R, City = Beijing, Country = China, Sales = 9000 }

{ ID = B, City = Mumbai, Country = India, Sales = 8888 }

{ ID = Q, City = London, Country = UK, Sales = 8000 }

{ ID = C, City = Karachi, Country = Pakistan, Sales = 7777 }

Заказчики, не вошедшие в верхнюю пятерку

{ ID = Р, City = Tehran, Country = Iran, Sales = 7000 }

{ ID = D, City = Delhi, Country = India, Sales = 6666 }

{ ID = 0, City = Cairo, Country = Egypt, Sales = 6000 }

{ ID = E, City = Sao Paulo, Country = Brazil, Sales = 5555 }

{ ID = N, City = Los Angeles, Country = USA, Sales = 5000 }

{ ID = F, City = Moscow, Country = Russia, Sales = 4444 }

{ ID = M, City = Tokyo, Country = Japan, Sales = 4000 }

{ ID = G, City = Seoul, Country = Korea, Sales = 3333 }

{ ID = L, City = Jakarta, Country = Indonesia, Sales = 3000 }

{ ID = H, City = Istanbul, Country = Turkey, Sales = 2222 }

{ ID = T, City = Lima, Country = Peru, Sales = 2002 }

{ ID = K, City = Mexico City, Country = Mexico, Sales = 2000 }

{ ID = I, City = Shanghai, Country = China, Sales = 1111 }

{ ID = S, City = Bogot б , Country = Colombia, Sales = 1001 }

{ ID = J, City = Lagos, Country = Nigeria, Sales = 1000 }

Программа завершена, нажмите Enter для продолжения:

Описание полученных результатов

Класс Customer и инициализация списка customers - такие же, как и в предыдущих примерах.

Основной запрос состоит из конструкции from. . .orderby. . . select в синтаксисе запросов, подобный ранее созданным в этой главе, но с тем отличием, что здесь отсутствует ограничивающая конструкция where, потому что необходимо получить всех заказчиков (упорядоченных по объемам продаж от большего к меньшему):

var queryResults =

from с in customers orderby с.Sales descending

select new { c.ID, c.City, c.Country, c.Sales }

Этот пример работает несколько иначе, чем предыдущие, в том смысле, что вы не применяете операцию до тех пор, пока не начнете цикл foreach на его результатах, поскольку хотите повторно использовать эти результаты.



Сначала применяется Take (5) для получения первых пяти заказчиков:

foreach (var item in queryResults.Take(5))

Затем используется Skip (5) для пропуска первых пяти элементов (которые уже были напечатаны) и распечатки остальных заказчиков из того же исходного набора результатов запроса:

foreach (var item in queryResults.Skip(5))

Код для печати результатов и приостановки вывода на экран такой же, как в предыдущих примерах, за исключением небольших изменений в сообщениях, поэтому мы не станем повторять его здесь.

First и FirstOrDefault

Предположим, что требуется найти пример заказчика из Африки в наборе данных. Нужны сами данные, а не значение true/false или результирующий набор соответствующих значений.

LINQ предоставляет эту возможность через метод First (), который возвращает первый элемент результирующего набора, отвечающий заданным критериям. Если нет ни одного заказчика из Африки, то LINQ предоставляет метод для обработки такого случая без дополнительного кода обработки ошибок: FirstOrDefault ().

В следующем практическом занятии используется как First (), так и FirstOrDefault () со списком данных о заказчиках.

Практнесковзвнтял Использование First И FirstOrDefault

Выполните следующие шаги для создания примера в Visual С# 2008.

1. Создайте новое консольное приложение по имени 2б-14-FirstOrDefault в каталоге С:\BegVCSharp\Chapter26.

2. Скопируйте код создания класса Customer и инициализации списка customers (List<Customer> customers) из примера 26-7-QueryComplexObjects.

3. В методе Main () вслед за инициализацией списка заказчиков введите следующий запрос:

var queryResults = from с in customers

select new { c.City, c.Country, c.Region }

4. Введите следующие запросы, использующие First () и FirstOrDefault (): Console.WriteLine( Заказчик из Африки );

Console.WriteLine(queryResults.First(с => с.Region == Africa )); Console.WriteLine( Заказчик из Антарктиды );

Console.WriteLine(queryResults.FirstOrDefault(с => с.Region == Antarctica ));

5. Откомпилируйте и выполните программу. Вот результирующий вывод:

Заказчик из Африки

( City = Lagos, Country = Nigeria, Region = Africa } Заказчик из Антарктиды

Программа завершена, нажмите Enter для продолжения:



1 ... 273 274 275 [ 276 ] 277 278 279 ... 396

© 2006 - 2024 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки.
Яндекс.Метрика