|
Программирование >> Программирование с использованием ajax
Console.WriteLine( Для продолжения нажмите Enter... ); Console.ReadLine(); 3. Откомпилируйте и выполните программу (можно просто нажать <F5> для запус-
Как и ранее, нажмите <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...
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |