Språkintegrerad fråga

Den aktuella versionen av sidan har ännu inte granskats av erfarna bidragsgivare och kan skilja sig väsentligt från versionen som granskades den 2 maj 2015; kontroller kräver 20 redigeringar .

Language Integrated Query (LINQ)  är ett Microsoft- projekt för att lägga till SQL -liknande frågespråksyntax till .NET Framework- programmeringsspråken . Tidigare implementerad i C# och Visual Basic .NET . Många av koncepten som LINQ introducerar testades ursprungligen i forskningsprojektet Microsoft .

LINQ släpptes med Visual Studio 2008 i slutet av november 2007. För att snabbt skapa och felsöka LINQ-frågor finns det ett specialiserat verktyg som heter LINQPad .

Funktioner i språket

Med hjälp av några nya språkfunktioner låter LINQ dig använda SQL-liknande syntax direkt i koden för ett program skrivet, till exempel i C#:

Datakällor

LINQ stöder en frågemotor för samlingar av objekt i minnet, relationsdatabaser och XML -data och har en utökningsbar arkitektur som tillåter tredjepartsutvecklare att komma åt sina datalager via LINQ-motorn. För att göra detta måste du implementera standardfrågeoperatorer med förlängningsmetoder, eller implementera IQueryable- gränssnittet , som låter dig analysera uttrycksträdet under körning och översätta det till ditt frågespråk. Det finns ett exempel på en anpassad implementering av standardfrågeoperatorer i gemenskapen. [ett]

Till exempel använder LINQ för SQL (tidigare DLinq), som översätter LINQ-uttryck till SQL-frågor mot en databas, kompilatorns förmåga att bygga ett uttrycksträd baserat på programkontext snarare än att skapa funktionsdelegater. Med ett uttrycksträd som beskriver en fråga kan en specialiserad databasleverantör analysera den och översätta den till en fråga på lämpligt språk för databasen, som Microsoft SQL Server, Jet (som används i Microsoft Access) eller någon annan. Vissa entusiaster har redan skapat LINQ proof-of-concept-bibliotek för att fråga WMI [2] , RSS , LDAP [3] , ADO.NET - datainsamlingar , Amazon Web Services [4] och SharePoint [5] med denna taktik .

Den befintliga förhandsvisningen från Microsoft inkluderar även en implementering av LINQ för XML (tidigare kallad Xlinq), vilket gör det mycket lättare att bygga och extrahera data från ett XML-dokument med liknande tillvägagångssätt. Dessutom arbetar Microsoft på ADO.NET vNext, även känd som LINQ to Entities.

LINQ efter datakällstyper

LINQ till SQL

I slutet av 2008 flyttades ansvaret för utvecklingen av LINQ till SQL, tillsammans med ADO.NET Entity Framework (inklusive LINQ till Entities), till ADO.NET-utvecklingsteamet (det så kallade ADO.NET-teamet). medan tidigare LINQ till SQL utvecklades av ett team som var associerat med utvecklingen av en kompilator för C# -språket [6] . Därmed blev det uppenbart att båda lösningarna syftar till att lösa samma problem och därför kommer att konkurrera med varandra. Lite senare klargjorde Tim Mallalew att Microsoft skulle fortsätta att utveckla LINQ till SQL baserat på feedback från användare. Men från och med .NET 4.0 är den rekommenderade lösningen LINQ to Entities. Dessutom, baserat på input från användare, kommer de mest använda funktionerna i LINQ till SQL att läggas till LINQ till Entities [7] . Som ett resultat kommer det att ske en gradvis sammanslagning av lösningar.

Experter stödde generellt detta beslut. Så, till exempel, Marco Russo, även om han reserverade sig för att flytta till LINQ till Entities inte bör ske tidigare än att det blir en fullfjädrad ersättning för LINQ till SQL, menade ändå att det är en bra idé att kombinera två delvis överlappande ramverk, men samtidigt ska de användare som är vana vid att använda "kasserade" delar av lösningar inte lida [6] .

LINQ till objekt

Det är inget annat än funktionell programmering förklädd som SQL [8] -syntax .

SQLMetal

LINQ-biblioteket innehåller verktyget SQLMetal, som låter dig automatiskt generera klasser direkt från databaserna som stöds av .NET Framework, vilket gör det mycket snabbt och enkelt att integrera databasentiteter i din kod. Ett alternativ är den relationsobjektdesigner som ingår i Visual Studio, men den kan endast användas med Microsoft SQL Server.

Exempel

// typ Northwind är en avkomling av DataContext skapad av SQLMetal // typ Northwind.Orders är Table<Order> // typ Northwind.Customers är Table<Kund> Northwind db = new Northwind ( connectionString ); // nyckelordet 'var' används, eftersom det inte finns något namn på typen // som sökresultatet tillhör var q = från o i db . Beställningar från c i db . Kunder där o . Kvalitet == "200" && ( o . Kund -ID == c . Kund -ID ) välj ny { o . Förfallodatum , c . Företagsnamn , c . Artikel-ID , c . Objektnamn }; // q refererar till ett objekt av typen IEnumerable<T>, där T är en anonym typ // genererad av kompilatorn foreach ( var t in q ) { // t är starkt skrivet även om dess typ inte har ett namn // känd när du skriver kod Konsol . WriteLine ( "DueDate Type = {0}" , t . DueDate . GetType ()); Konsol . WriteLine ( "Företagsnamn (gemener) = {0}" , t . Företagsnamn . ToLower ()); Konsol . WriteLine ( "Artikel-ID * 2 = {0}" , t . Artikel-ID * 2 ); }

Se även

Anteckningar

  1. En anpassad implementering av .NET Standard Query Operators från LINQ
  2. Fråga ditt WMI med lätthet med WMILinq! - Mielz' Thingamajig (nedlänk) . Hämtad 21 juni 2007. Arkiverad från originalet 10 april 2007. 
  3. The IQueryable tales - LINQ till LDAP - Del 0: Introduktion - B# .NET Blog
  4. Introduktion av Linq till Amazon - Fabrices webblogg
  5. LINQ till SharePoint
  6. 1 2 LINQ till SQL vs LINQ till enheter - beslut från ADO.NET-teamet Arkiverad 24 januari 2011.  (Engelsk)
  7. ↑ Förtydligande av meddelandet om L2S Futures  
  8. LINQ som ett steg mot funktionell programmering (Vlad Chistyakov, RSDN Magazine #2-2008)

Litteratur

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

Länkar