Language Integrated Query

Материал из Википедии — свободной энциклопедии
Текущая версия страницы покане проверялась опытными участниками и может значительно отличаться отверсии, проверенной 2 мая 2015 года; проверки требуют23 правки.
Перейти к навигацииПерейти к поиску
LINQ в составе .NET Framework

Language Integrated Query (LINQ) — проектMicrosoft по добавлениюсинтаксиса языка запросов, напоминающегоSQL, в языки программирования платформы.NET Framework. Ранее был реализован в языкахC# иVisual Basic .NET. Множество концепций, которые вводит LINQ, изначально опробовали в исследовательском проекте Microsoft.

LINQ выпущен вместе сVisual Studio 2008 в конце ноября 2007 года.Для быстрого создания и отладки запросов LINQ существует специализированная утилитаLINQPad.

Содержание

Особенности языка

[править |править код]

Используя некоторые новые особенности языка, LINQ позволяет использовать SQL-подобный синтаксис непосредственно в коде программы, написанной, например, на языке C#:

Источники данных

[править |править код]

Изначально поддерживая механизм запросов для коллекций объектов в памяти, реляционных баз данных и данных в форматеXML, LINQ обладает расширяемой архитектурой, которая позволяет сторонним разработчикам реализовать доступ к своим хранилищам данных через механизм LINQ. Для этого необходимо реализовать стандартные операторы запросов, используя методы расширения, или реализоватьинтерфейс IQueryable, позволяющий разбирать дерево выражения во время выполнения, транслируя его в свой язык запросов. В сообществе существует пример пользовательской реализации стандартных операторов запросов.[1]

Например, LINQ для SQL (бывший DLinq), который преобразует LINQ-выражения в SQL-запросы к базе данных, использует возможности компилятора для построения дерева выражений, основываясь на контексте программы, а не создавая делегаты функций. Получив дерево выражения, описывающее запрос, специализированный провайдер базы данных может его проанализировать и преобразовать в запрос на подходящем языке для базы данных, например Microsoft SQL Server, Jet (которая используется в Microsoft Access) или любой другой. Некоторые энтузиасты при помощи подобной тактики уже создали для проверки концепции LINQ библиотеки для запросов кWMI[2],RSS,LDAP[3], коллекциям данныхADO.NET, Amazon Web Services[4] и SharePoint[5].

Существующая предварительная версия от Microsoft также включает в себя реализацию LINQ для XML (ранее называвшуюся XLinq), которая значительно упрощает построение XML-документа и извлечение данных из него, используя похожие подходы. Кроме того, Microsoft работает над ADO.NET vNext, также известным как LINQ to Entities.

LINQ по типам источников данных

[править |править код]

LINQ к SQL

[править |править код]

В конце 2008 года ответственность за разработку LINQ к SQL наряду с ADO.NET Entity Framework (в том числе и LINQ к Entities) была переложена на команду, занимавшуюся развитием ADO.NET (т. н. ADO.NET team), тогда как ранее развитием LINQ к SQL занималась команда, связанная с разработкой компилятора для языкаC#[6]. Таким образом, стало очевидно, что оба решения нацелены на решение одних и тех же задач, а следовательно будут конкурировать друг с другом. Немного позднее Тим Маллалью разъяснил, что Microsoft продолжит разработку LINQ к SQL на основе пользовательских отзывов. Однако, начиная с версии платформы .NET 4.0, рекомендованным решением становится именно LINQ к Entities. Кроме того, на основании информации, полученной от пользователей, наиболее употребляемые возможности LINQ к SQL будут добавлены и в LINQ к Entities[7]. В результате чего произойдет постепенное слияние решений.

Эксперты в основном поддержали данное решение. Так, например, Марко Руссо хотя и оговорился, что переходить к LINQ к Entities стоит не раньше, чем оно превратится в полноценную замену LINQ к SQL, тем не менее заявил, что объединение двух частично перекрывающих друг друга фреймворков — хорошая идея, но при этом не должны пострадать те пользователи, которые привыкли пользоваться «отбрасываемыми» частями решений[6].

LINQ к объектам

[править |править код]

Представляет собой не что иное, какфункциональное программирование, замаскированное под синтаксис SQL[8].

SQLMetal

[править |править код]

Библиотека LINQ включает в себя инструмент SQLMetal, который позволяет автоматически генерировать классы непосредственно из поддерживаемых .NET Framework баз данных, что дает возможность очень быстро и просто интегрировать в код сущности базы данных. Альтернативой является входящий в состав Visual Studio реляционный конструктор объектов, однако он может быть использован только вместе с Microsoft SQL Server.

Пример

[править |править код]
// тип Northwind — это наследник DataContext, созданный SQLMetal// тип Northwind.Orders — Table<Order>// тип Northwind.Customers — Table<Customer>Northwinddb=newNorthwind(connectionString);// используется ключевое слово 'var', так как не существует имени у типа,// к которому принадлежит результат запросаvarq=fromoindb.Ordersfromcindb.Customerswhereo.Quality=="200"&&(o.CustomerID==c.CustomerID)selectnew{o.DueDate,c.CompanyName,c.ItemID,c.ItemName};// q ссылается на объект типа IEnumerable<T>, где T — анонимный тип,// генерируемый компиляторомforeach(vartinq){// t является строго типизированным, хоть у его типа и отсутствует имя,// известное при написании кодаConsole.WriteLine("DueDate Type = {0}",t.DueDate.GetType());Console.WriteLine("CompanyName (lowercased) = {0}",t.CompanyName.ToLower());Console.WriteLine("ItemID * 2 = {0}",t.ItemID*2);}

См. также

[править |править код]

Примечания

[править |править код]
  1. A custom implementation of the .NET Standard Query Operators from LINQ . Дата обращения: 21 июня 2007. Архивировано 29 сентября 2007 года.
  2. Query your WMI with ease using WMILinq! — Mielz' Thingamajig . Дата обращения: 21 июня 2007. Архивировано изоригинала 10 апреля 2007 года.
  3. The IQueryable tales — LINQ to LDAP — Part 0: Introduction — B# .NET Blog . Дата обращения: 21 июня 2007. Архивировано изоригинала 30 июня 2007 года.
  4. Introducing Linq to Amazon — Fabrice’s weblog . Дата обращения: 21 июня 2007. Архивировано 30 июня 2007 года.
  5. LINQ to SharePoint . Дата обращения: 21 июня 2007. Архивировано 12 августа 2007 года.
  6. 12LINQ to SQL vs LINQ to Entities — decisions from ADO.NET teamАрхивировано 24 января 2011 года.  (англ.)
  7. Clarifying the message on L2S FuturesАрхивная копия от 30 июня 2011 наWayback Machine  (англ.)
  8. LINQ как шаг к функциональному программированию (Чистяков Влад, RSDN Magazine #2-2008) . Дата обращения: 14 сентября 2016. Архивировано 19 сентября 2016 года.

Литература

[править |править код]
  • Адам Фримен, Джозеф C. Раттц-мл. LINQ: язык интегрированных запросов в C# 2010 для профессионалов = Pro LINQ: Language Integrated Query in C# 2010. —М.:«Вильямс», 2011. — С. 656. —ISBN 978-5-8459-1701-0.

Ссылки

[править |править код]
Перейти к шаблону «.NET»
.NET
Реализации
Архитектура
Инфраструктура
Языки Microsoft
Другие языки
Windows Foundations
Компоненты
Сравнения
Будущие технологии
Информационные ресурсы
Источник —https://ru.wikipedia.org/w/index.php?title=Language_Integrated_Query&oldid=149831953
Категория:
Скрытые категории: