Читаем C# 4.0: полное руководство полностью

// наименований товаров и состояния их запасов на складе,

var inStockList = items.Join(statusList,

                             kl => kl.ItemNumber,

                             k2 => k2.ItemNumber,

                        (kl, k2) => new Temp(kl.Name, k2.InStock) );

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

var inStockList = items.Join(statusList,

                            kl => kl.ItemNumber,

                            k2 => k2.ItemNumber,

                        (kl, k2) => new { kl.Name, k2.InStock} );

Синтаксис запросов и методы запроса

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

where х < 10

будет преобразован компилятором в следующий вызов.

Where(х => х < 10)

Таким образом, оба способа формирования запросов в конечном итоге сходятся на одном и том же.

Но если оба способа оказываются в конечном счете равноценными, то какой из них лучше для программирования на С#? В целом, рекомендуется чаще пользоваться синтаксисом запросов, поскольку он полностью интегрирован в язык С#, поддерживается соответствующими ключевыми словами и синтаксическим конструкциями.

Дополнительные методы расширения, связанные с запросами

Помимо методов, соответствующих операторам запроса, поддерживаемым в С#, име-ется ряд других методов расширения, связанных с запросами и зачастую оказывающих помощь в формировании запросов. Эти методы предоставляются в среде .NET Framework и определены для интерфейса IEnumerable в классе Enumerable. Ниже приведены наиболее часто используемые методы расширения, связанные с запросами. Многие из них могут перегружаться, поэтому они представлены лишь в самой общей форме.

Метод            Описание

All(predicate)   Возвращает логическое значение true,

                 если все элементы в последовательности

                 удовлетворяют условию, задаваемому параметром

                 predicate

Any(predicate)   Возвращает логическое значение true, если

                 любой элемент в последовательности удовлетворяет

                 условию, задаваемому параметром predicate

Average()        Возвращает среднее всех значений в числовой

                 последовательности

Contains(value)  Возвращает логическое значение true, если

                 в последовательности содержится указанный объект

Count()          Возвращает длину последовательности, т.е.

                 количество составляющих ее элементов

First()          Возвращает первый элемент в последовательности

Last()           Возвращает последний элемент в последовательности

Max()            Возвращает максимальное значение в

                 последовательности

Min()            Возвращает минимальное значение в

                 последовательности

Sum()            Возвращает сумму значений в числовой

                 последовательности

Метод Count() уже демонстрировался ранее в этой главе. А в следующей программе демонстрируются остальные методы расширения, связанные с запросами.

// Использовать ряд методов расширения, определенных в классе Enumerable.

using System;

using System.Linq;

class ExtMethods {

  static void Main() {

    int[] nums = { 3, 1, 2, 5, 4 };

    Console.WriteLine("Минимальное значение равно " + nums.Min());

    Console.WriteLine("Максимальное значение равно " + nums.Max());

    Console.WriteLine("Первое значение равно " + nums.First());

    Console.WriteLine("Последнее значение равно " + nums.Last());

    Console.WriteLine("Суммарное значение равно " + nums.Sum());

Перейти на страницу:

Похожие книги

1001 совет по обустройству компьютера
1001 совет по обустройству компьютера

В книге собраны и обобщены советы по решению различных проблем, которые рано или поздно возникают при эксплуатации как экономичных нетбуков, так и современных настольных моделей. Все приведенные рецепты опробованы на практике и разбиты по темам: аппаратные средства персональных компьютеров, компьютерные сети и подключение к Интернету, установка, настройка и ремонт ОС Windows, работа в Интернете, защита от вирусов. Рассмотрены не только готовые решения внезапно возникающих проблем, но и ответы на многие вопросы, которые возникают еще до покупки компьютера. Приведен необходимый минимум технических сведений, позволяющий принять осознанное решение.Компакт-диск прилагается только к печатному изданию книги.

Юрий Всеволодович Ревич

Программирование, программы, базы данных / Интернет / Компьютерное «железо» / ОС и Сети / Программное обеспечение / Книги по IT
Разработка приложений в среде Linux. Второе издание
Разработка приложений в среде Linux. Второе издание

Книга известных профессионалов в области разработки коммерческих приложений в Linux представляет СЃРѕР±РѕР№ отличный справочник для широкого круга программистов в Linux, а также тех разработчиков на языке С, которые перешли в среду Linux из РґСЂСѓРіРёС… операционных систем. РџРѕРґСЂРѕР±но рассматриваются концепции, лежащие в основе процесса создания системных приложений, а также разнообразные доступные инструменты и библиотеки. Среди рассматриваемых в книге вопросов можно выделить анализ особенностей применения лицензий GNU, использование СЃРІРѕР±одно распространяемых компиляторов и библиотек, системное программирование для Linux, а также написание и отладка собственных переносимых библиотек. Р

Майкл К. Джонсон , Эрик В. Троан

Программирование, программы, базы данных
Adobe InDesign CS3
Adobe InDesign CS3

Книга посвящена верстке и макетированию в программе Adobe InDesign CS3. Помимо того что в ней описываются возможности программы, рассматриваются также принципы и традиции верстки, приводятся примеры решения типичных задач. Все это позволит читателю не только овладеть богатым инструментарием программы, но и грамотно применять его.Материал книги разделен на логические части: теоретические сведения, инструментарий программы, решение задач, – а также рассчитан на два уровня подготовки читателей – начинающих и опытных пользователей, что выгодно отличает книгу от других изданий. Это позволит применять ее как новичкам для знакомства с программой, так и пользователям со стажем для пополнения своих знаний.

Владимир Гавриилович Завгородний , Владимир Завгородний

Программирование, программы, базы данных / Программное обеспечение / Книги по IT