Interogare integrată în limbaj

Versiunea actuală a paginii nu a fost încă examinată de colaboratori experimentați și poate diferi semnificativ de versiunea revizuită la 2 mai 2015; verificările necesită 20 de modificări .

Language Integrated Query (LINQ)  este un proiect Microsoft pentru a adăuga sintaxa limbajului de interogare asemănătoare SQL la limbajele de programare .NET Framework . Implementat anterior în C# și Visual Basic .NET . Multe dintre conceptele pe care LINQ le introduce au fost testate inițial în proiectul de cercetare Microsoft .

LINQ a fost lansat cu Visual Studio 2008 la sfârșitul lunii noiembrie 2007. Pentru a crea și a depana rapid interogările LINQ, există un utilitar specializat numit LINQPad .

Caracteristicile limbii

Folosind unele caracteristici de limbaj noi, LINQ vă permite să utilizați sintaxa asemănătoare SQL direct în codul unui program scris, de exemplu, în C#:

Surse de date

Sprijinind nativ un motor de interogări pentru colecții de obiecte în memorie, baze de date relaționale și date XML , LINQ are o arhitectură extensibilă care permite dezvoltatorilor terți să-și acceseze depozitele de date prin motorul LINQ. Pentru a face acest lucru, trebuie să implementați operatori de interogare standard folosind metode de extensie sau să implementați interfața IQueryable , care vă permite să analizați arborele de expresie în timpul execuției, traducându-l în limbajul de interogare. Există un exemplu de implementare personalizată a operatorilor de interogare standard în comunitate. [unu]

De exemplu, LINQ for SQL (fostul DLinq), care traduce expresiile LINQ în interogări SQL în raport cu o bază de date, folosește capacitatea compilatorului de a construi un arbore de expresii bazat pe contextul programului, mai degrabă decât să creeze delegați de funcție. Având în vedere un arbore de expresii care descrie o interogare, un furnizor specializat de baze de date o poate analiza și traduce într-o interogare în limba corespunzătoare pentru baza de date, cum ar fi Microsoft SQL Server, Jet (care este folosit în Microsoft Access) sau orice altul. Unii entuziaști au creat deja biblioteci LINQ proof-of-concept pentru interogarea WMI [2] , RSS , LDAP [3] , colecții de date ADO.NET , Amazon Web Services [4] și SharePoint [5] folosind această tactică .

Previzualizarea existentă de la Microsoft include, de asemenea, o implementare a LINQ for XML (denumită anterior XLinq), care face mult mai ușoară construirea și extragerea datelor dintr-un document XML folosind abordări similare. În plus, Microsoft lucrează la ADO.NET vNext, cunoscut și sub numele de LINQ to Entities.

LINQ după tipuri de surse de date

LINQ to SQL

La sfârșitul anului 2008, responsabilitatea pentru dezvoltarea LINQ to SQL, împreună cu ADO.NET Entity Framework (inclusiv LINQ to Entities), a fost transferată echipei de dezvoltare ADO.NET (așa-numita echipă ADO.NET), în timp ce anterior LINQ to SQL a fost dezvoltat de o echipă asociată cu dezvoltarea unui compilator pentru limbajul C# [6] . Astfel, a devenit evident că ambele soluții au ca scop rezolvarea acelorași probleme și, prin urmare, vor concura între ele. Puțin mai târziu, Tim Mallalew a clarificat că Microsoft va continua să dezvolte LINQ to SQL pe baza feedback-ului utilizatorilor. Cu toate acestea, începând cu .NET 4.0, soluția recomandată este LINQ to Entities. În plus, pe baza intrărilor de la utilizatori, cele mai frecvent utilizate caracteristici ale LINQ to SQL vor fi adăugate la LINQ to Entities [7] . Ca urmare, va exista o fuziune treptată a soluțiilor.

Experții au susținut în general această decizie. Deci, de exemplu, Marco Russo, deși a făcut o rezervă că trecerea la LINQ to Entities nu ar trebui să fie mai devreme decât se transformă într-un înlocuitor cu drepturi depline pentru LINQ to SQL, a afirmat totuși că combinarea a două cadre parțial suprapuse este o idee bună, dar în același timp acei utilizatori care sunt obișnuiți să folosească părți de soluții „aruncate” nu ar trebui să sufere [6] .

LINQ la obiecte

Nu este altceva decât programare funcțională deghizată în sintaxă SQL [8] .

SQLMetal

Biblioteca LINQ include instrumentul SQLMetal, care vă permite să generați automat clase direct din bazele de date suportate de .NET Framework, ceea ce face foarte rapidă și ușoară integrarea entităților bazei de date în codul dumneavoastră. O alternativă este proiectantul de obiecte relațional inclus în Visual Studio, dar poate fi utilizat numai cu Microsoft SQL Server.

Exemplu

// tip Northwind este un descendent DataContext creat de SQLMetal // tip Northwind.Orders este Table<Order> // tip Northwind.Customers este Table<Customer> Northwind db = nou Northwind ( connectionString ); // se folosește cuvântul cheie „var”, deoarece nu există un nume pentru tipul // căruia îi aparține rezultatul interogării var q = de la o în db . Comenzi de la c în db . Clienţii unde o . Calitate == „200” && ( o . CustomerID == c . CustomerID ) selectați nou { o . Data scadenței , c . CompanyName , c . ItemID , c . ItemName }; // q se referă la un obiect de tip IEnumerable<T>, unde T este un tip anonim // generat de compilator foreach ( var t în q ) { // t este tastată puternic chiar dacă tipul său nu are un nume // cunoscut când scrie codul Consola . WriteLine ( "DueDate Type = {0}" , t . DueDate . GetType ()); Consola . WriteLine ( "CompanyName (minuscule) = {0}" , t . CompanyName . ToLower ()); Consola . WriteLine ( "ItemID * 2 = {0}" , t . ItemID * 2 ); }

Vezi și

Note

  1. O implementare personalizată a operatorilor de interogare standard .NET de la LINQ
  2. Interogați cu ușurință WMI folosind WMILinq! - Thingamajig al lui Mielz (link în jos) . Consultat la 21 iunie 2007. Arhivat din original pe 10 aprilie 2007. 
  3. Poveștile IQueryable - LINQ to LDAP - Partea 0: Introducere - B# .NET Blog
  4. Vă prezentăm Linq pe Amazon - blogul lui Fabrice
  5. LINQ to SharePoint
  6. 1 2 LINQ to SQL vs LINQ to Entities - decizii ale echipei ADO.NET Arhivat 24 ianuarie 2011.  (Engleză)
  7. ↑ Clarificarea mesajului despre L2S Futures  
  8. LINQ ca un pas către programarea funcțională (Vlad Chistyakov, RSDN Magazine #2-2008)

Literatură

  • 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 .

Link -uri