Kieli integroitu kysely

Kokeneet kirjoittajat eivät ole vielä tarkistaneet sivun nykyistä versiota, ja se voi poiketa merkittävästi 2. toukokuuta 2015 tarkistetusta versiosta . tarkastukset vaativat 20 muokkausta .

Language Integrated Query (LINQ)  on Microsoftin projekti , joka lisää SQL :n kaltaisen kyselykielen syntaksin .NET Frameworkin ohjelmointikieliin . Aikaisemmin toteutettu C# - ja Visual Basic .NET -versioissa . Monet LINQ:n esittelemistä käsitteistä testattiin alun perin Microsoft -tutkimusprojektissa .

LINQ julkaistiin Visual Studio 2008:n kanssa marraskuun 2007 lopussa. LINQ-kyselyjen nopeaan luomiseen ja virheenkorjaukseen on olemassa erikoisapuohjelma nimeltä LINQPad .

Kielen ominaisuudet

Joitakin uusia kieliominaisuuksia käyttämällä LINQ antaa sinun käyttää SQL:n kaltaista syntaksia suoraan ohjelman koodissa, esimerkiksi C#:lla:

Tietolähteet

LINQ tukee natiivisti muistiobjektien, relaatiotietokantojen ja XML -tietojen kokoelmien kyselymoottoria, ja siinä on laajennettava arkkitehtuuri, jonka avulla kolmannen osapuolen kehittäjät voivat käyttää tietovarastoitaan LINQ-moottorin kautta. Tätä varten sinun on otettava käyttöön vakiokyselyoperaattoreita käyttämällä laajennusmenetelmiä tai otettava käyttöön IQueryable- liitäntä , jonka avulla voit jäsentää lausekepuun ajon aikana ja kääntää sen kyselykielellesi. Yhteisössä on esimerkki tavallisten kyselyoperaattoreiden mukautetusta toteutuksesta. [yksi]

Esimerkiksi LINQ for SQL (aiemmin DLinq), joka kääntää LINQ-lausekkeet SQL-kyselyiksi tietokantaa vasten, käyttää kääntäjän kykyä rakentaa lausekepuu ohjelmakontekstin perusteella funktion delegaattien luomisen sijaan. Kun kyselyä kuvaava lausekepuu on annettu, erikoistunut tietokannan tarjoaja voi jäsentää sen ja kääntää sen kyselyksi tietokantaan sopivalla kielellä, kuten Microsoft SQL Server, Jet (jota käytetään Microsoft Accessissa) tai millä tahansa muulla. Jotkut harrastajat ovat jo luoneet LINQ-konseptikirjastoja WMI :n [2] , RSS :n , LDAP :n [3] , ADO.NET - tietokokoelmien , Amazon Web Services [4] ja SharePointin [5] kyselyjä varten tällä taktiikalla .

Microsoftin nykyinen esikatselu sisältää myös LINQ for XML -toteutuksen (aiemmin XLinq), mikä helpottaa XML-dokumentin tietojen rakentamista ja purkamista samankaltaisilla menetelmillä. Lisäksi Microsoft työskentelee ADO.NET vNextissä, joka tunnetaan myös nimellä LINQ to Entities.

LINQ tietolähdetyyppien mukaan

LINQ to SQL

Vuoden 2008 lopussa vastuu LINQ to SQL:n ja ADO.NET Entity Frameworkin (mukaan lukien LINQ to Entities) kehittämisestä siirtyi ADO.NET-kehitystiimille (ns. ADO.NET-tiimi). kun taas aiemmin LINQ to SQL kehitti tiimi, joka liittyi C# -kielen kääntäjän kehittämiseen [6] . Näin kävi selväksi, että molemmat ratkaisut tähtäävät samojen ongelmien ratkaisemiseen ja kilpailevat siten keskenään. Hieman myöhemmin Tim Mallelew selvensi, että Microsoft jatkaa LINQ:n kehittämistä SQL:hen käyttäjien palautteen perusteella. NET 4.0:sta alkaen suositeltu ratkaisu on kuitenkin LINQ to Entities. Lisäksi käyttäjien syötteen perusteella LINQ to SQL:n yleisimmin käytetyt ominaisuudet lisätään LINQ to Entitiesiin [7] . Tämän seurauksena ratkaisut yhdistetään asteittain.

Asiantuntijat kannattivat yleensä tätä päätöstä. Joten esimerkiksi Marco Russo, vaikka hän teki varauksen, jonka mukaan LINQ to Entitiesiin siirtyminen ei saisi tapahtua aikaisemmin kuin siitä tulee täysimittainen LINQ:n korvaaminen SQL:lle, totesi kuitenkin, että kahden osittain päällekkäisen kehyksen yhdistäminen on hyvä idea, mutta samaan aikaan niiden käyttäjien, jotka ovat tottuneet käyttämään ratkaisujen "hylättyjä" osia, ei pitäisi kärsiä [6] .

LINQ objekteihin

Se ei ole muuta kuin funktionaalista ohjelmointia , joka on naamioitu SQL [8] -syntaksiksi .

SQLMetal

LINQ-kirjasto sisältää SQLMetal-työkalun, jonka avulla voit luoda automaattisesti luokkia suoraan .NET Frameworkin tukemista tietokannoista, mikä tekee tietokantakokonaisuuksien integroimisesta koodiin erittäin nopeaa ja helppoa. Vaihtoehtona on Visual Studion mukana tuleva relaatioobjektien suunnittelija, mutta sitä voidaan käyttää vain Microsoft SQL Serverin kanssa.

Esimerkki

// tyyppi Northwind on SQLMetalin luoma DataContext jälkeläinen // tyyppi Northwind.Orders on Table<Order> // tyyppi Northwind.Customers on Table<Asiakas> Northwind db = uusi pohjoistuuli ( yhteysString ); // avainsanaa "var" käytetään, koska tyypille ei ole nimeä // johon kyselyn tulos kuuluu var q = o : sta db . Tilaukset c : stä db :ssa . Asiakkaat missä o . Laatu == "200" && ( o . Asiakastunnus == c . Asiakastunnus ) valitse uusi { o . Eräpäivä , c . Yrityksen nimi , c . Tuotetunnus , c . Tuotteen nimi }; // q viittaa objektiin, jonka tyyppi on IEnumerable<T>, missä T on kääntäjän luoma anonyymi tyyppi // foreach ( var t in q ) { // t on vahvasti kirjoitettu, vaikka sen tyypillä ei ole nimeä // tiedossa koodia kirjoitettaessa konsoli . WriteLine ( "DueDate Type = {0}" , t . DueDate . GetType ()); konsoli . WriteLine ( "YrityksenNimi (pienet kirjaimet) = {0}" , t . YrityksenNimi . Alempi ()); konsoli . WriteLine ( "Tuotetunnus * 2 = {0}" , t . Tuotetunnus * 2 ); }

Katso myös

Muistiinpanot

  1. LINQ:n mukautettu .NET Standard Query Operators -toteutus
  2. Kysy WMI:stäsi helposti WMILinq:n avulla! - Mielz' Thingamajig (downlink) . Haettu 21. kesäkuuta 2007. Arkistoitu alkuperäisestä 10. huhtikuuta 2007. 
  3. IQueryable-tarinat - LINQ to LDAP - Osa 0: Johdanto - B# .NET -blogi
  4. Esittelyssä Linq Amazoniin - Fabricen blogi
  5. LINQ SharePointiin
  6. 1 2 LINQ to SQL vs LINQ to Entities - ADO.NET-tiimin päätökset Arkistoitu 24. tammikuuta 2011.  (Englanti)
  7. L2S Futuresin viestin selventäminen  
  8. LINQ askeleena kohti toimivaa ohjelmointia (Vlad Chistyakov, RSDN Magazine #2-2008)

Kirjallisuus

  • 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. - S. 656. - ISBN 978-5-8459-1701-0 .

Linkit