Обзор LINQ to DataSet

74

Для использования LINQ to SQL с определенной базой данных для нее должны быть сгенерированы и скомпилированы классы исходного кода либо же должен быть создан файл отображения. Это значит, что выполнение запросов LINQ с помощью LINQ to SQL на неизвестной до момента выполнения базе данных попросту невозможно. К тому же LINQ to SQL работает только с Microsoft SQL Server. Что же делать разработчику?

Операции LINQ to DataSet позволяют разработчику выполнять запросы LINQ на DataSet, и поскольку объект DataSet может быть получен с использованием нормальных SQL-запросов ADO.NET, интерфейс LINQ to DataSet позволяет выполнять запросы LINQ к любой базе данных, которая может быть опрошена с помощью ADO.NET. Это представляет намного более динамичный интерфейс запросов баз данных, чем LINQ to SQL.

Наверняка возник вопрос: при каких обстоятельствах может случиться так, что база данных будет неизвестна до момента выполнения программы? Действительно, в типовых приложениях база данных известна на этапе разработки, и потому нет необходимости иметь дело с LINQ to DataSet. Но как насчет приложений типа утилит баз данных?

Например, рассмотрим такое приложение, как диспетчер SQL Server Enterprise Manager. Ему не известно, какие базы данных будут установлены на сервере до момента его запуска. Приложение Enterprise Manager позволяет проверить, какие базы установлены на сервере и какие таблицы есть в каждой из них. Разработчик приложения Enterprise Manager не имел никакой возможности сгенерировать классы LINQ to SQL во время компиляции именно для вашей базы данных. И здесь на помощь приходит LINQ to DataSet.

При дальнейшем описание API-интерфейса LINQ to DataSet, вы найдете операции, относящиеся к объектам DataTable, DataRow и DataColumn. Не удивляйтесь, если вы нечасто встретите здесь ссылки на объекты DataSet. Понятно, что в реальных обстоятельствах объекты DataTable почти всегда происходят от объектов DataSet. Однако для независимости от баз данных, краткости и ясности в большинстве приведенных примерах намеренно создаются простые объекты DataTable программно, а не извлекаются из базы данных.

Операции LINQ to DataSet состоят из множества специальных операций, определенных в нескольких сборках и пространствах имен, которые позволяют разработчику решать следующие задачи:

В дополнение к этим операциям LINQ to DataSet, как только вы вызовете операцию AsEnumerable, то сможете вызывать стандартные операции запросов из LINQ to Objects на возвращенных последовательностях объектов DataRow, достигая большей мощи и гибкости.

Пройди тесты
Лучший чат для C# программистов