Skip to main content

Что такое языковой интегрированный запрос?

Интегрированный в язык запрос (LINQ) предоставляет возможность беспрепятственной интеграции синтаксиса декларативного запроса в обязательные языки, прежде всего C # и VB.NET. Разработка LINQ позволила решить проблемы разработчиков, работающих в объектно-ориентированных средах, возникающих при выполнении запросов. Он был представлен как часть Microsoft® .NET Framework версии 3.5 в ноябре 2007 года и под кодовым названием Visual Studio® «Orcas».

До создания языкового интегрированного запроса языки .NET не имели собственного способа запроса реляционных баз данных или документов XML. Разработчики, пишущие на этих языках, должны были встраивать SQL или XQuery соответственно в виде строк и вручную сопоставлять полученные данные с объектами .NET. Встроенные строки запросов и сопоставления не могут быть проверены компиляторами .NET, что позволяет обнаруживать потенциальные ошибки во время выполнения.

Еще одна проблема, с которой сталкивались разработчики до того, как интегрированные в язык запросы заключались в том, что языки .NET имели только объектно-ориентированный синтаксис для запросов к коллекциям объектов .NET. Как правило, разработчик перебирает всю исходную коллекцию, создавая новые коллекции результатов на основе критериев поиска. Разработчик также может преобразовывать данные при создании коллекций результатов. Этот подход был громоздким; простой запрос выбора, написанный на C # или VB, потребует как минимум пять строк кода, тогда как для того же запроса потребуется одна строка кода на языке запросов.

Проблемы запросов в объектно-ориентированной среде дали Microsoft стимул для создания LINQ. LINQ предоставляет синтаксис запроса, напоминающий SQL, для использования в потоке с C # или VB, в комплекте со статической проверкой типов. При запросе коллекций .NET вместо использования вложенных циклов разработчики могут использовать синтаксис LINQ для выбора элементов и преобразования данных. Среди других преимуществ это приводит к меньшему количеству строк кода по сравнению с чисто объектно-ориентированным синтаксисом.

При доступе к внешним источникам данных LINQ и поддерживающие компоненты устраняют необходимость во встроенных языках запросов и отображениях данных в самом языке .NET. Чтобы выполнить сопоставление данных, LINQ зависит от компонентов, называемых поставщиками LINQ. LINQ-to-Objects - поставщик акций, который позволяет LINQ получать доступ к коллекциям .NET. Аналогичным образом, существуют поставщики для доступа к реляционным базам данных и документам XML. Большинство из этих поставщиков являются сторонними компонентами, не включенными в .NET Framework. Независимо от используемого поставщика все запросы используют один и тот же синтаксис LINQ.

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