Language Integrated Query
Language Integrated Query (LINQ) это проект Microsoft которые добавляет синтаксис языка запросов, напоминающий SQL, в языки программирования .NET Framework, сначала появился в языках C# и Visual Basic .NET. Множество концепций, которые вводит LINQ, изначально опробовали в исследовательском проекте Microsoft Cω.
Особенности языка
Используя некоторые новые особенности языка, LINQ позволяет использовать SQL подобный синтаксис непосредственно в коде программы, написанной, например, на языке C#:
- Анонимные типы
- Методы расширения
- Лямда-исчисление
- Дерево выражений
- Стандартные операторы языка запросов
Источник данных
Хотя LINQ изначально поддерживает механизм запросов для коллекций объектов, реляционных баз данных и данных в формате XML, он обладает расширяемой архитектурой, которая дает возможность сторонним разработчикам реализовать доступ к их хранилищам данных через механизм LINQ. Для этого необходимо реализовать стандартные операторы запросов используя Методы расширения.
Например, LINQ для SQL (DLINQ), который преобразует выражения на LINQ в запросы к базе данных SQL, использует возможности комилятора для построения дерева выражений основываясь на контексте программы, что лучше чем создание делегатов функций. Полученное дерево описывает запрос, специализированный провайдер базы данных может его проанализировать и преобразовать в запрос на подходящем языке для базы данных, например Microsoft SQL Server, Jet (которая используется в Microsoft Access) или любой другой. Некоторые энтузиасты уже создали, для проверки концепции LINQ, библиотеки для запросов к WMI, RSS, коллекциям данных ADO.NET и Amazon Web Services.
Существующая предварительная версия от Microsoft также включает в себя реализацию LINQ для XML (XLINQ), которая значительно упрощает конструирование XML документа и извлечение данных из него, используя похожие подходы.
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); }
Даты
LINQ планируется выпустить вместе с 'Orcas' версией Visual Studio, предположительно в 2007. [1]
Ссылки
- Official Microsoft LINQ Project
- Linq Project Overview
- Microsoft LINQ forum
- LINQ page on NetFXGuide.com
- LINQ to SharePoint - Its magically delicious!
Это заготовка статьи о компьютерных языках. Помогите Википедии, дополнив её. |