Language Integrated Query
Материал из Википедии — свободной энциклопедии
Language Integrated Query (LINQ) — проект Microsoft по добавлению синтаксиса языка запросов, напоминающего SQL, в языки программирования платформы .NET Framework. Ранее был реализован в языках C# и Visual Basic .NET. Множество концепций, которые вводит LINQ, изначально опробовали в исследовательском проекте Microsoft Cω.
LINQ выпущен вместе с Visual Studio 2008 в конце ноября 2007 года.
Содержание |
[править] Особенности языка
Используя некоторые новые особенности языка, 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.
[править] SQLMetal
Библиотека LINQ включает в себя инструмент SQLMetal, который позволяет автоматически генерировать классы непосредственно из базы данных MS SQL, что дает возможность очень быстро и просто интегрировать в код сущности базы данных.
[править] Пример
// тип Northwind — это наследник DataContext, созданный SQLMetal // тип Northwind.Orders — Table<Order> // тип Northwind.Customers — Table<Customer> Northwind db = new Northwind(connectionString); // используется ключевое слово 'var', так как не существует имени у типа, // к которому принадлежит результат запроса var q = from o in db.Orders, 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# 2008 для профессионалов = Pro LINQ: Language Integrated Query in C# 2008. — М.: «Вильямс», 2008. — С. 560. — ISBN 978-5-8459-1427-9
[править] Ссылки
- Official Microsoft LINQ Project
- Linq Project Overview
- Microsoft LINQ forum
- LINQ page on NetFXGuide.com
- LINQ to SharePoint — Its magically delicious!
- dotConnect: LINQ to Oracle, MySQL, PostgreSQL и SQLite

