Сообщений 10    Оценка 6        Оценить  
Система Orphus

LINQ. Язык интегрированных запросов в C# 2008 для профессионалов

Автор: Джозеф C. Раттц-мл.
Издательство: "Вильямс", 2008
560 страниц
ISBN: 978-5-8459-1427-9
ISBN: 978-1-59-059789-7

Материал предоставил: Сергей Тепляков
Найти в магазинах

Аннотация

Содержание
Комментарии

Аннотация

Книга одного из экспертов в области технологий .NET представляет собой учебное и справочное пособие для разработчиков .NET-приложений, использующих новую версию ASP.NET 3.5 и предложенную Microsoft технологию работы с данными под названием LINQ, которая является встроенной в язык C# 3.0. Предложенный автором практический подход к изложению материала позволяет оперативно изучить новейшие способы доступа к данным из разнообразных источников, в том числе SQL Server, и методы работы с XML на реальных примерах. Подробно рассматриваются все вопросы, связанные с LINQ, начиная с объектной модели, операций и API-интерфейсов LINQ to Objects, LINQ to XML, LINQ to DataSet, LINQ to SQL и LINQ to Entities, и заканчивая разрешением конфликтов параллельного доступа и работе с представлениями баз данных.

Книга рассчитана на программистов разной квалификации, а также будет полезна для студентов и преподавателей дисциплин, связанных с программированием и разработкой для .NET.

Содержание

Об авторе
О техническом рецензенте
Благодарности
От издательства
Исходный код примеров

Часть I. LINQ: язык интегрированных запросов в C# 2008

Глава 1. Знакомство с LINQ
Смещение парадигмы
Запрос к XML
Запрос к базе данных SQL Server
Введение
LINQ для запросов данных
Компоненты
Как получить LINQ
LINQ - не только для запросов
Советы начинающим
Когда запутались, используйте ключевое слово var
Использование операций Cast или OfType для унаследованных коллекций
Отдавайте предпочтение операции OfType перед Cast
Не рассчитывайте на безошибочность запросов
Используйте Log из DataContext
Используйте форум LINQ
Резюме

Глава 2. Расширения языка C# 3.0 для LINQ
Новые дополнения C# 3.0
Лямбда-выражения
Деревья выражений
Ключевое слово var, инициализация объектов и анонимные типы
Расширяющие методы
Частичные методы
Выражения запросов
Резюме

Часть II. LINQ to Objects

Глава 3. Введение в LINQ to Objects
Обзор LINQ to Objects
IEnumerable<T>, последовательности и стандартные операции запросов
Возврат IEnumerable<T>, Yieldingи отложенные запросы
Делегаты Func
Алфавитный указатель стандартных операций запросов
Резюме

Глава 4. Отложенные операции
Необходимые пространства имен
Необходимые сборки
Общие классы
Разделение отложенных операций по их назначению
Ограничение
Проекция
Разбиение
Конкатенация
Упорядочивание
Соединение
Группировка
Множества
Преобразование
Элемент
Генерация
Резюме

Глава 5. Не отложенные операции
Необходимые пространства имен
Общие классы
Не отложенные операции по их назначению
Преобразование
Эквивалентность
Элемент
Квалификаторы
Агрегация
Резюме

Часть III. LINQ to XML

Глава 6. Введение в LINQ to XML
Введение
Обман W3C DOM XML API
Резюме

Глава 7. Интерфейс LINQ to XML API
Необходимые пространства имен
Существенные усовершенствования дизайна API
Конструирование деревьев XML было упрощено функциональным конструированием
Центральная роль элемента вместо документа
Имена, пространства имен и префиксы
Извлечение значения узла
Объектная модель LINQ to XML
Отложенное выполнение запросов, удаление узлов и "проблема Хэллоуина"
Создание XML
Создание элементов с помощью XElement
Создание атрибутов с помощью XAttribute
Создание комментариев с помощью XComment
Создание контейнеров с помощью XContainer
Создание объявлений с помощью XDeclaration
Создание типов документов с помощью XDocumentType
Создание документов с помощью XDocument
Создание имен с помощью XName
Создание пространств имен с помощью XNamespace
Создание узлов с помощью XNode
Создание инструкций обработки с помощью XProcessingInstruction
Создание потоковых элементов с помощью XStreamingElement
Создание текста с помощью XText
Создание CData с помощью XCData
Вывод XML
Сохранение с помощью XDocument.Save()
Сохранение с помощью XElement.Save()
Ввод XML
Загрузка с помощью XDocument.Load()
Загрузка с помощью XEelement.Load()
Разбор содержимого методами XDocument.Parse() или XElement.Parse()
Проход по XML
Свойства прохода
Вперед с помощью XNode.NextNode
Методы прохода
Модификация XML
Добавление узлов
Удаление узлов
Обновление узлов
XElement.SetElementValue() на дочерних объектах XElement
Атрибуты XML
Создание атрибута
Проход по атрибутам
Модификация атрибута
Аннотации XML
Добавление аннотации с помощью XObject.AddAnnotation()
Обращение к аннотациям с помощью XObject.Annotation() или XObject.Annotations()
Удаление аннотаций с помощью XObject.RemoveAnnotations()
Пример аннотаций
События XML
XObject.Changing
XObject.Changed
Несколько примеров событий
Трюк, забава или неопределенность?
Резюме

Глава 8. Операции LINQ to XML
Введение в операции LINQ to XML
Ancestors
Прототипы
Примеры
AncestorsAndSelf
Прототипы
Примеры
Attributes
Прототипы
Примеры
DescendantNodes
Прототипы
Примеры
DescendantNodesAndSelf
Прототипы
Примеры
Descendants
Прототипы
Примеры
DescendantsAndSelf
Прототипы
Примеры
Elements
Прототипы
Примеры
InDocumentOrder
Прототипы
Примеры
Nodes
Прототипы
Примеры
Remove
Прототипы
Примеры
Резюме

Глава 9. Дополнительные возможности XML
Необходимые пространства имен
Запросы
Без спуска
Сложный запрос
Трансформации
Трансформации с использованием XSLT
Трансформация с использованием функционального конструирования
Советы
Проверка достоверности
Расширяющие методы
Прототипы
Получение схемы XML
Примеры
XPath
Прототипы
Примеры
Резюме

Часть IV. LINQ to DataSet

Глава 10. Операции LINQ to DataSet
Необходимые сборки
Необходимые пространства имен
Общий код для примеров
Операции множеств DataRow
Distinct
Except
Intersect
Union
SequenceEqual
Операции над полями DataRow
Field<T>
SetField<T>
Операции DataTable
AsEnumerable
CopyToDataTable<DataRow>
Примеры
Резюме

Глава 11. Дополнительные возможности DataSet
Необходимые пространства имен
Типизированные DataSet
Собираем все вместе
Резюме

Часть V. LINQ to SQL

Глава 12. Введение в LINQ to SQL
Введение в LINQ to SQL
DataContext
Сущностные классы
Ассоциации
Обнаружение конфликтов параллельного доступа
Разрешение конфликтов параллельного доступа
Предварительные условия для запуска примеров
Получение соответствующей версии базы данных Norhwind
Генерация сущностных классов Northwind
Генерация XML-файла отображения Northwind
Использование LINQ to SQL API
IQueryable<T>
Некоторые общие методы
GetStringFromDb()
ExecuteStatementInDb()
Резюме

Глава 13. Советы и инструменты, связанные с LINQ to SQL
Введение
Советы
Используйте свойство DataContext.Log
Используйте метод GetChangeSet()
Попробуйте использовать частичные классы или файлы отображения
Попробуйте использовать частичные методы
Инструменты
SQLMetal
Object Relational Designer
Совместное использование SQLMetal и O/R Designer
Резюме

Глава 14. Операции для баз данных в LINQ to SQL
Предварительные условия для запуска примеров
Некоторые общие методы
Использование программного интерфейса LINQ to SQL API
Стандартные операции для баз данных
Вставки
Запросы
Обновления
Удаления
Переопределение операторов модификации базы данных
Переопределение метода Insert
Переопределение метода Update
Переопределение метода Delete
Пример
Переопределение в Object Relational Designer
Соображения
Трансляция SQL
Резюме

Глава 15. Сущностные классы LINQ to SQL
Предварительные условия для запуска примеров
Сущностные классы
Создание сущностных классов
XML-схема внешнего файла отображения
Сравнение проекций на сущностные и на несущностные классы
Расширение сущностных методов частичными методами
Импорт классов System.Data.Linq
EntitySet<T>
EntityRef<T>
Table<T>
IExecuteResult
ISingleResult<T>
IMultipleResults
Резюме

Глава 16. DataContext
Предварительные условия для запуска примеров
Некоторые общие методы
Использование LINQ to SQL API
Класс [Your]DataContext
Класс DataContext
Главные цели
DataContext() и [Your]DataContext()
SubminChanges()
DatabaseExists()
CreateDatabase()
DeleteDatabase()
CreateMethodCallQuery()
ExecuteQuery()
Translate()
ExecuteCommand()
ExecuteMethodCall()
GetCommand()
GetChangeSet()
GetTable()
Refresh()
Резюме

Глава 17. Конфликты параллельного доступа
Предварительные условия для запуска примеров
Некоторые общие методы
Использование LINQ to SQL API
Конфликты параллелизма
Оптимистический параллелизм
Пессимистический параллелизм
Альтернативный подход для средних звеньев и серверов
Резюме

Глава 18. Дополнительные возможности SQL
Предварительные условия для запуска примеров
Использование LINQ to SQL API
Использование LINQ to XML API
Представления базы данных
Наследование сущностных классов
Транзакции
Резюме

Предметный указатель

Комментарии

Сергей Тепляков

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

Не является исключением из этого правила и новая технология Майкрософт под названием Language Integrated Query (LINQ) призванная решить многие проблемы доступа к данным, которые возникают у разработчика в его повседневной деятельности. И в связи с огромным вниманием к этой технологии со стороны разработчиков, первая книга по LINQ, переведенная на русский язык, также будет крайне востребованной. В связи с этим хотелось бы знать стоит ли она потраченного времени и денег.

Для начала хотелось бы отметить тот факт, что сам автор в течение длительного времени хотел написать какую-либо книгу, но никак не мог выбрать для этого подходящую тему. Либо он слишком слабо разбирался в предмете, либо об этом уже было написано достаточно и не было смысла в появлении еще одной книге по данной тематике. И вот в 2005 году, узнав о работе Майкрософт над новой технологией, Джозеф Раттц пришел к выводу, что это именно то, что нужно. И не страшно, что он об этой технологии не имел ни малейшего понятия, главное, что о ней также не знал и никто другой. Итак, выбор пал на LINQ и спустя 17 месяцев плодотворной работы в ноябре 2007-го года одновременно с официальным выходом Visual Studio 2008 (а вместе с ней и технологии LINQ) в свет вышла книга с незамысловатым названием "Pro LINQ Language Integrated Query In C# 2008".

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

Часть 2 книги полностью посвящена LINQ to Objects. Помимо пространных рассуждений на тему доступа к данным, восхищением новыми возможностями и краткому обзору Query Expressions, основная доля этой части приходиться на описание методов расширения. Причем автор поставил перед собой цель описать каждую перегруженную версию каждого метода, и даже если методы практически ни чем не отличаются друг от друга, все равно им посвящается отдельный раздел с кратким описанием и примером использования. Примеры - это отдельная тема для разговора. Чтобы они были самодостаточными, каждый пример состоит из трех частей: получения тестовых данных (5-6 строк), запрос (1-2 строки), результаты (до 1 страницы). Сложив все это вместе, мы получаем более ста страниц текста, с надуманными примерами, несмешными шутками автора и отсутствием полноценной картины в голове у читателя. Эту сотню страниц, можно смело заменить одной нормальной статьей по LINQ to Objects и справкой Майкрософт.

Помимо этого, в тексте встречаются и откровенные "ляпы". Вот, например, автор указывает в одной из своих заметок, что операция OrderBy является нестабильной (unstable), в то время как операция ThenBy является стабильной (stable), хотя официальная документация Майкрософт придерживается несколько иного мнения (обе операции являются стабильными). Но более интересен не сам факт приведения неверного совета, а то, что я нашел на сайте Майкрософт обсуждение, в котором некий Джозеф Раттц обсуждает стабильность/нестабильность операции OrderBy с одним из сотрудников Майкрософт. И в рамках этого обсуждения, дается четкий ответ на то, что операция OrderBy является стабильной и почему поведение этой операции именно таково. Данное обсуждение датировано маем 2007 года, но, видимо, сроки давят не только на разработчиков программного обеспечения, но и на авторов книг, поэтому Джозеф Раттц не успел исправить эту досадную промашку к выходу книги в ноябре 2007 года.

Теперь перейдем к части 3 LINQ to XML. Эта часть написана в таком же стиле, как и предыдущая: немного теории, восхищение новой технологией, немного юмора (не всегда уместного) и подробное описание API функций с примерами применения. Примеры, опять же, надуманы и не пытаются раскрыть тему целиком, а всего лишь показывают применение единственной функции в очень ограниченном контексте. Глава 8 вообще не содержит никакой новой информации, а по сути, дублирует описание функций из предыдущей главы.

Четвертая часть книги LINQ to DataSet больше всего понравилась распространенным применением шаблонов написания кода типа Copy-Paste. Так, например, описание функций Distinct, Except, Intersect, Union и SequenceEqual занимают 10! страниц, причем многие абзацы отличаются друг от друга единственным словом (именем метода).

Наиболее крупной частью книги является часть 5, посвященная LINQ to SQL. И это не удивительно, ведь при описании этой технологии нужно объяснить суть объектно-реляционного отображения, роль сущностных классов, что такое DataContext, схемы и атрибуты, проблему параллелизма и многое другое. Автор рассматривает все эти темы, но делает это как-то скомкано и несколько сумбурно. Начинает объяснять одно, затрагивает другое, при этом откладывая детальное описание затронутой проблемы на потом. В этой части мне особенно понравилась глава, посвященная атрибутам. Автор приводит пример кода, который использует три атрибута и всего 7 свойств. После этого на 14 страницах следует описание всех атрибутов со всеми свойствами, без единого примера. И если некоторые атрибуты и свойства являются интуитивно понятными, то многие требуют дополнительного пояснения, которого, к сожалению, не наблюдается. И когда автор в конце главы, в резюме пишет о том, что он поздравляет читателя с тем, что он стал экспертом в области объектно-реляционного отображения, это не вызывает ничего кроме улыбки.

Так какой из этого следует вывод? Стоит приобретать эту книгу или нет?

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

    Сообщений 10    Оценка 6        Оценить