Nyelvi integrált lekérdezés

Az oldal jelenlegi verzióját még nem ellenőrizték tapasztalt közreműködők, és jelentősen eltérhet a 2015. május 2-án felülvizsgált verziótól ; az ellenőrzések 20 szerkesztést igényelnek .

A Language Integrated Query (LINQ)  egy Microsoft -projekt , amely SQL - szerű lekérdezési nyelvi szintaxist ad a .NET-keretrendszer programozási nyelveihez . Korábban C# -ban és Visual Basic .NET -ben volt megvalósítva . A LINQ által bemutatott koncepciók közül sokat eredetileg a Microsoft kutatási projektben teszteltek .

A LINQ a Visual Studio 2008-mal együtt jelent meg 2007. november végén. A LINQ-lekérdezések gyors létrehozásához és hibakereséséhez létezik egy LINQPad nevű speciális segédprogram .

A nyelv jellemzői

Néhány új nyelvi funkció segítségével a LINQ lehetővé teszi az SQL-szerű szintaxis használatát közvetlenül egy program kódjában, például C#-ban:

Adatforrások

A memórián belüli objektumok, relációs adatbázisok és XML -adatok gyűjteményeihez natív lekérdezőmotort támogató LINQ olyan bővíthető architektúrával rendelkezik, amely lehetővé teszi a külső fejlesztők számára, hogy a LINQ motoron keresztül hozzáférjenek adattáraikhoz. Ehhez szabványos lekérdezési operátorokat kell megvalósítania kiterjesztési módszerekkel, vagy meg kell valósítania az IQueryable felületet , amely lehetővé teszi a kifejezésfa futás közbeni elemzését, lefordítva azt a lekérdezési nyelvre. Van példa a szabványos lekérdezési operátorok egyedi megvalósítására a közösségben. [egy]

Például a LINQ for SQL (korábban DLinq), amely a LINQ-kifejezéseket SQL-lekérdezésekké fordítja le egy adatbázisban, a fordító azon képességét használja, hogy a programkontextus alapján kifejezésfát hozzon létre, ahelyett, hogy függvény delegáltakat hozna létre. Adott egy kifejezésfa, amely leír egy lekérdezést, egy speciális adatbázis-szolgáltató elemezni tudja, és lefordíthatja lekérdezéssé az adatbázisnak megfelelő nyelven, például Microsoft SQL Server, Jet (amely a Microsoft Accessben használatos) vagy bármely más nyelven. Egyes rajongók már létrehoztak LINQ proof-of-concept könyvtárakat WMI [2] , RSS , LDAP [3] , ADO.NET adatgyűjtemények , Amazon Web Services [4] és SharePoint [5] lekérdezésére ezzel a taktikával .

A Microsoft jelenlegi előnézete a LINQ for XML (korábbi nevén XLinq) megvalósítását is tartalmazza, amely sokkal egyszerűbbé teszi az XML-dokumentumok hasonló megközelítésekkel történő összeállítását és adatkinyerését. Ezenkívül a Microsoft dolgozik az ADO.NET vNext-en, amely LINQ to Entities néven is ismert.

LINQ adatforrástípusok szerint

LINQ to SQL

2008 végén a LINQ to SQL és az ADO.NET Entity Framework (beleértve a LINQ to Entities) fejlesztésének felelősségét az ADO.NET fejlesztői csapatra (az úgynevezett ADO.NET csapatra) helyezték át. míg korábban a LINQ to SQL-t a C# nyelv fordítójának fejlesztésével foglalkozó csapat fejlesztette [6] . Így nyilvánvalóvá vált, hogy mindkét megoldás ugyanazon problémák megoldására irányul, ezért versenyezni fog egymással. Kicsit később Tim Mallelew tisztázta, hogy a Microsoft továbbra is fejleszti a LINQ to SQL-t a felhasználói visszajelzések alapján. A .NET 4.0-tól kezdve azonban az ajánlott megoldás a LINQ to Entities. Ezenkívül a felhasználóktól származó adatok alapján a LINQ to SQL leggyakrabban használt szolgáltatásai hozzáadódnak a LINQ to Entitieshez [7] . Ennek eredményeként a megoldások fokozatos összevonása következik be.

A szakértők általában támogatták ezt a döntést. Így például Marco Russo, bár fenntartással élt azzal kapcsolatban, hogy a LINQ-ra való áttérés az Entities-re nem lehet korábban, mint a LINQ SQL-re való teljes helyettesítése, ennek ellenére kijelentette, hogy jó ötlet két, részben átfedő keretrendszer kombinálása. de ugyanakkor azoknak a felhasználóknak sem kell szenvedniük, akik hozzászoktak a megoldások "eldobott" részeinek használatához [6] .

LINQ objektumokhoz

Ez nem más, mint SQL [8] szintaxisnak álcázott funkcionális programozás .

SQLMetal

A LINQ könyvtár tartalmazza az SQLMetal eszközt, amely lehetővé teszi az osztályok automatikus generálását közvetlenül a .NET-keretrendszer által támogatott adatbázisokból, így nagyon gyors és egyszerű az adatbázis-entitások integrálása a kódba. Alternatív megoldás a Visual Studio relációs objektumtervezője, de csak a Microsoft SQL Serverrel használható.

Példa

// A Northwind típus az SQLMetal által létrehozott DataContext leszármazottja // írja be a Northwind-t.Orders a Table<Order> // a Northwind típusa. Az ügyfelek a Table<Customer> Northwind db = new Northwind ( connectString ); // a 'var' kulcsszó használatos, mivel nincs neve annak a típusnak , // amelyhez a lekérdezés eredménye tartozik var q = o - tól a db -ban . Rendelések c - tól db - ban . Ügyfelek ahol o . Minőség == "200" && ( o . Ügyfélazonosító == c . Ügyfélazonosító ) válasszon új { o . Esedékesség , c . Cégnév , c . ItemID , c . Elemnév }; // A q egy IEnumerable<T> típusú objektumra utal, ahol T egy névtelen típus // amelyet a fordító generál foreach ( var t in q ) { // a t erősen begépelt, bár típusának nincs neve // ​​a kód írásakor Konzol . WriteLine ( "DueDate Type = {0}" , t . DueDate . GetType ()); Konzol . WriteLine ( " Cégnév (kisbetűs) = {0}" , t . Vállalatnév . ToLower ()); Konzol . WriteLine ( "Elemazonosító * 2 = {0}" , t . ItemID * 2 ); }

Lásd még

Jegyzetek

  1. A .NET Standard Query Operators egyedi megvalósítása a LINQ-tól
  2. Könnyen lekérdezheti WMI-jét a WMILinq használatával! - Mielz' Thingamajig (downlink) . Letöltve: 2007. június 21. Az eredetiből archiválva : 2007. április 10.. 
  3. Az IQueryable mesék – LINQ to LDAP – 0. rész: Bevezetés – B# .NET blog
  4. A Linq bemutatása az Amazonnak – Fabrice webblogja
  5. LINK a SharePointhoz
  6. 1 2 LINQ to SQL vs LINQ to Entities – döntések az ADO.NET csapatától Archiválva : 2011. január 24.  (Angol)
  7. Az L2S Futures üzenetének tisztázása  
  8. A LINQ, mint egy lépés a funkcionális programozás felé (Vlad Chistyakov, RSDN Magazine #2-2008)

Irodalom

  • Adam Freeman, Joseph C. Ratts Jr. LINQ: Language Integrated Query in C# 2010 for Professionals = Pro LINQ: Language Integrated Query in C# 2010. - M .: Williams , 2011. - P. 656. - ISBN 978-5-8459-1701-0 .

Linkek