Что такое Language Integrated Query?


Фреймворк .NET используется для разработки приложений, в том числе и там, где нужно использовать более одного хранилища данных. Как пример это взаимодействие с web-ресурсами через обращение к API в виде xml (иерарический вид) использует крупнейшая росийская социальная сеть Vkontakte, а так же одновременно доступ к реляционному хранилищу(база данных).

LINQ (Language-Integrated Query) вышел вслед за .NET Framework 3.5 в 2007 году вместе с Microsoft Visual Studio 2008. Так же поддержка данного расширения есть в Mono — кросс платформенном open source .NET фреймфорке.
Предназначение LINQ в выполнении стандартизированных запросов на получение данных к любому совместимому хранилищу (база данных, xml, WMI,RSS, LDAP, Amazon Web Services, SharePoint и так далее) с контролем типов данных (так же в C# есть поддержка анонимных методов и лямбда-выражений), что позволяет в перспективе добиваться универсальности кода и его повторного использования. Информация по теме  coding4.net — использование LINQ to Objects, LINQ to XML, LINQ to SQL.

Без LINQ возникает проблема с написанием «лишнего» кода для работы с разными иерархическими хранилищами. При этом затраты на написание такого кода не увеличивают какой-либо стоимости разрабатываемого программного обеспечения, так как никакая функциональность не добавляется. А вот затраты возрастают: тестирование, поддержка и внесение изменений. Но хуже всего то, что применив код к одному xml-файлу Мы его не можем применить к другому =( Вот зачем нужен был LINQ решить проблемы этого подхода.

Плюсы использования LINQ:

  • Понятный, компактный и читаемый код используя декларативный подход;
  • Расширяемость позволяет доставать данные из любых хранилищ данных;
  • Нет SQL-ля;

Пример использования LINQ:

//  С помощью SQLMetal создаём ConnectionLinqObj — наследник DataContext 
// ConnectionLinqObj.BlogPostss — Table
// ConnectionLinqObj.Blogs — Table
 
ConnectionLinqObj db = new ConnectionLinqObj(connectionString);
 
// используется ключевое слово 'var', так как не существует имени у типа,
// к которому принадлежит результат запроса
 
var q = from o in db.BlogPostss from c in db.Blogs
    where o.category == "13" && (o.BlogID == c.BlogID)
    select new { o.Date, c.Name, c.PostID, c.PostName };
 
// q ссылается на объект типа IEnumerable, где T — анонимный тип,
// генерируемый компилятором
 
foreach (var t in q)
{
    // t является строго типизированным, хоть у его типа и отсутствует имя,
    // известное при написании кода
 
    Console.WriteLine("Date Type = {0}", t.Date.GetType());
    Console.WriteLine("Name (lowercased) = {0}", t.Name.ToLower());
    Console.WriteLine("PostID * 2 = {0}", t.PostID * 2);
}

LINQ to XML

Чтение из my-books.xml. Кстати можно так же создавать файлы)))

<?xml version="1.0"?>
<catalog>
  <book id="BookId0">
    <author>Мэтью Мак-Дональд</author>
    <title>Язык программирования С#</title>
    <genre>Computer</genre>
    <price>144.99</price>
    <publish_date>2090-12-21</publish_date>
    <description>
       Язык программирования С#, разработанный в корпорации Microsoft 
    </description>
  </book>
  <book id="BookId1">
    <author>Мартынов Н.Н.</author>
    <title>С# для начинающих</title>
    <genre>Fantasy</genre>
    <price>5.95</price>
    <publish_date>2007-02-11</publish_date>
    <description>
нига является общедоступным учебником начального уровня по основам информатики и программированию на языке С#.
    </description>
  </book>
</catalog>
XMLElement XMLElement = XMLElement.Load("my-books.xml");
 
var query = from c in XMLElement.Descendants("book")
            where c.Element("description").Value.Contains("XML")
            select c;
 
foreach (var one_q in query){     Console.WriteLine( one_q.Element("author").Value + "-" + one_q.Element("title").Value);  }

http://blog.wel.org.ua

работаю админом, прогером сеошнегом :)

Leave a Comment

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Загрузка...
Menu Title