Language Integrated Query

Language Integrated Query
LINQ в составе .NET Framework

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

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

Содержание

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

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

  • Анонимные типы
  • Методы расширения
  • Лямбда-исчисление
  • Дерево выражений
  • Стандартные операторы языка запросов

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

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

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

Существующая предварительная версия от 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#[7]. Таким образом, стало очевидно, что оба решения нацелены на решение одних и тех же задач, а следовательно будут конкурировать друг с другом. Немного позднее Тим Маллалью разъяснил, что Microsoft продолжит разработку LINQ к SQL на основе пользовательских отзывов. Однако, начиная с версии платформы .NET 4.0, рекомендованным решением становится именно LINQ к Entities. Кроме того, на основании информации, полученной от пользователей, наиболее употребляемые возможности LINQ к SQL будут добавлены и в LINQ к Entities[8]. В результате чего произойдет постепенное слияние решений.

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

SQLMetal

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

Пример

// тип Northwind — это наследник DataContext, созданный SQLMetal
// тип Northwind.Orders — Table<Order>
// тип Northwind.Customers — Table<Customer>
 
Northwind db = new Northwind(connectionString);
 
// используется ключевое слово 'var', так как не существует имени у типа,
// к которому принадлежит результат запроса
 
var q = from o in db.Orders from c in db.Customers
    where o.Quality == "200" && (o.CustomerID == c.CustomerID)
    select new { o.DueDate, c.CompanyName, c.ItemID, c.ItemName };
 
// q ссылается на объект типа IEnumerable<T>, где T — анонимный тип,
// генерируемый компилятором
 
foreach (var t in q)
{
    // 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);
}

Примечания

Литература

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

Ссылки


Wikimedia Foundation. 2010.

Игры ⚽ Поможем решить контрольную работу

Полезное


Смотреть что такое "Language Integrated Query" в других словарях:

  • Language Integrated Query — (Requête intégrée au langage, aussi connu sous le nom de LINQ) est un composant du Framework .NET de Microsoft qui ajoute des capacités d interrogation sur des données aux langages .NET en utilisant une syntaxe proche de celle de SQL. La plupart… …   Wikipédia en Français

  • Language Integrated Query — (LINQ) es un proyecto de Microsoft que agrega consultas nativas semejantes a las de SQL a los lenguajes de la plataforma .NET, inicialmente a los lenguajes Visual Basic .NET y C#. Muchos conceptos que LINQ ha introducido fueron originalmente… …   Wikipedia Español

  • Language Integrated Query — LINQ redirects here. For the card game, see Linq (card game). Language Integrated Query Influenced by SQL, Haskell Language Integrated Query (LINQ, pronounced link ) is a Microsoft .NET Framework component that adds native data querying… …   Wikipedia

  • Language Integrated Query — LINQ (Abkürzung für Language INtegrated Query) ist eine Komponente von Microsofts .NET Framework zur Abfrage von Datenquellen wie Datenbanken oder XML Dateien. Besonderheit ist, dass SQL , XLink und XQuery Anfragen direkt in .NET… …   Deutsch Wikipedia

  • Query language — Query languages are computer languages used to make queries into databases and information systems. Broadly, query languages can be classified according to whether they are database query languages or information retrieval query languages. The… …   Wikipedia

  • language — /lang gwij/, n. 1. a body of words and the systems for their use common to a people who are of the same community or nation, the same geographical area, or the same cultural tradition: the two languages of Belgium; a Bantu language; the French… …   Universalium

  • Oxygene (programming language) — Oxygene Developer RemObjects Software Stable release 3.0.21 (August 29, 2009; 2 years ago (2009 08 29)) Influenced by Object Pas …   Wikipedia

  • C Sharp (programming language) — The correct title of this article is C# (programming language). The substitution or omission of the # sign is because of technical restrictions. C# Paradigm(s) multi paradigm: structured, imperative …   Wikipedia

  • Common Language Infrastructure — Not to be confused with Command line Interface. The Common Language Infrastructure (CLI) is an open specification developed by Microsoft and standardized by ISO[1] and ECMA[2] that describes the executable code and runtime environment that form… …   Wikipedia

  • Common Intermediate Language — For the counterpart to compiled assembly in the Microsoft .NET framework, see .NET assembly. Common Intermediate Language (CIL, pronounced either sil or kil ) (formerly called Microsoft Intermediate Language or MSIL) is the lowest level human… …   Wikipedia


Поделиться ссылкой на выделенное

Прямая ссылка:
Нажмите правой клавишей мыши и выберите «Копировать ссылку»