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

1 ... 282 283 284 [ 285 ] 286 287 288 ... 396


Console.WriteLine( Для продолжения нажмите Enter... ); Console.ReadLine();

3. Откомпилируйте и выполните программу (можно просто нажать <F5> для запус-

ка отладки). Вы увидите общие объемы продаж по странам в порядке убывания:

Страна

Всего продаж

$263,566.98

Germany

$244,640.63

Austria

$139,496.63

Brazil

$114,968.48

France

$85,498.76

Venezuela

$60,814.89

$60, 616.51

Sweden

$59,523.70

Ireland

$57,317.39

Canada

$55,334.10

Belgium

$35,134.98

Denmark

$34,782.25

Switzerland

$32,919.50

Mexico

$24,073.45

Finland

$19,778.45

Spain

$19,431.89

Italy

$16,705.15

Portugal

$12,468.65

Argentina

$8,119.10

Norway

$5,735.15

Poland

$3,531.95

Для продолжения

нажмите Enter...

Как и ранее, нажмите <Enter> для завершения программы и закрытия экрана консоли.

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

Вы опять модифицировали предыдущую программу для повторного использования файла отображения LINQ to SQL Northwind.dbml. Для этого примера не пришлось добавлять новые классы к Northwind.dbml, поскольку использовались имеющиеся классы отображения Customer, Order и Order Detail.

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

Первый запрос LINQ подобен предыдущим запросам этой главы, и он использовал в качестве источника данных northWindDataContext. Customers:

var totalResults =

from с in northWindDataContext.Customers

select new

Country = c.Country, Sales = c.Orders.Sum(o = > o.Order Details.Sum(od = > od.Quantity * od.UnitPrice)

Для этого запроса нет необходимости ограничивать результат только заказчиками из США, поэтому здесь конструкция where отсутствует. Вместо свойства Region вы



выбираете Country, потому что этот запрос группирует и упорядочивает результаты по странам. Вы не выбираете ID, Name или City, потому что они не участвуют в результате и бессмысленно запрашивать больше данных из базы, чем вы собираетесь использовать. Операция Sum(), использующая лямбда-выражение od => od.Quantity * od.UnitPrice для получения суммы всех единиц заказов, теперь перемещена в сам запрос LINQ.

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

var groupResults =

from с in totalResults group с by с.Country into eg

select new { TotalSales = cg.Sum(c = > c.Sales), Country = eg.Key }

Этот запрос очень похож на группирующий запрос, который создавался для LINQ to Objects в предыдущей главе; он использует страну в качестве ключа для группировки результатов и суммирования общих продаж (в данном случае Sura () суммирует общие продажи по всем заказчикам в пределах страны), и операция вложена внутрь другого вызова Sum О для суммирования продаж по всем Orders для каждого Customer.

И в последнем запросе вы выполняете некоторое форматирование, печатая заголовки для столбцов Страна и Всего продаж в результате, а затем в цикле обработки foreach печатаете два столбца в выровненном формате (выровненном влево в пределах поля шириной 15 символов для Страна , и выровненном вправо в поле шириной 12 символов для Всего продаж :

Console.WriteLine ( CTpaHa\t\tBcero продаж\п--------\t------------ ) ;

foreach (var item in orderedResults) {

Console.WriteLine( {0,-15}{1,12} ,

item.Country, item.TotalSales.ToString ( C2 ));

Отображение сгенерированного SQL

Если вы знакомы с базами данных SQL, может вызвать удивление то, какие команды SQL для базы данных генерируются LINQ to SQL. Даже если вы не знакомы с SQL, иногда полезно взглянуть на сгенерированный код SQL, чтобы понять, как LINQ to SQL взаимодействует с базой данных (и, возможно, испытать благодарность к LINQ to SQL за то, что он выполняет за вас такую сложную работу).

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

Практическое занятие Отображение сгенерированного SQL

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

1. Модифицируйте проект из предыдущего примера BegVCSharp 2 7 1 FirstLINQtoSQLQuery в каталоге C:\BegVCSharp\Chapter27, как описано в последующих шагах.

2. Откройте главный файл Program.cs. Добавьте выделенные строки к методу Main О:



static void Main(string [ ] args) {

NorthWindDataContext northWindDataContext = new NorthwindDataContext() ; var totalResults = from с in northWindDataContext.Customers

select new

Country = c.Country, Sales = с .Orders . Sum (o = >

o.Order Details.Sum(od = > od.Quantity * od.UnitPrice)

Console.WriteLine( ------SQL для запроса totalResults-------- ) ;;

Console.WriteLine(totalResults);

Console.WriteLine ( Для продолжения нажмите Enter. . . ) ; Console.ReadLine();

var groupResults = from с in totalResults group с by c.Country into eg

select new { TotalSales = cg.Sum(c = > c.Sales), Country = eg.Key }

Console. Wri teLine ( ------SQL для запроса groupResults-------- ) ;;

Console.WriteLine(groupResults);

Console.WriteLine ( Для продолжения нажмите Enter. . . ) ; Console.ReadLine();

var orderedResults = from eg in groupResults orderby eg.TotalSales descending select eg

Console.WriteLine( ------SQL для запроса orderedResults-------- ) ;; Console.WriteLine (groupResults);

Console.WriteLine ( Для продолжения нажмите Enter. . . ) ; Console.ReadLine();

Console.WriteLine ( CTpaHa\t\tBeero продаж\п--------\t------------ ) ;

foreach (var item in orderedResults) {

Console.WriteLine( {0,-15}{1,12} ,

item.Country, item.TotalSales.ToString( C2 ));

Console.WriteLine( Для продолжения нажмите Enter... ); Console.ReadLine();

3. Откомпилируйте и выполните программу (можно просто нажать <F5> для запуска от ладки). Вы увидите следующий вывод SQL для первого запроса на экране консоли:

------ SQL для запроса totalResults --------

SELECT [tO].[Country], (

SELECT SUM([t4].[value])

FROM (

SELECT SUM([t3] . [value]) (

SELECT SUM((CONVERT(Decimal(29,4), [t2].[Quantity]) ) * [t2].[UnitPrice])

FROM [dbo].[Order Details] AS [t2]

WHERE [t2] . [OrderlD] = [tl] .[OrderlD] ) AS [value], [tl].[CustomerlD] FROM [dbo].[Orders] AS [tl] ) AS [t3]

WHERE [t3].[CustomerlD] = [tO].[CustomerlD] ) AS [value]

FROM [dbo].[Customers] AS [tO] Для продолжения нажмите Enter...



1 ... 282 283 284 [ 285 ] 286 287 288 ... 396

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