Kezdőlap > .NET, C#, Linq > Bevezetés a LINQ világába– (1.rész)

Bevezetés a LINQ világába– (1.rész)

2011. június 7. kedd Hozzászólás Go to comments

Az alábbi fejezetek a “Bevezetés a LINQ világába” c. irományomból  valóak. Ez egy saját kis jegyzet, reményeim szerint hasznát tudjátok venni. Amiben viszont én kérném a segítségeteket az az, hogy az írást javítsátok. Ha fogalmazási, stilisztikai vagy esetleg tartalmi hibát vélnétek felfedezni kérlek írjátok meg a kommentek között.
Segítségetek előre is köszönöm.

Mi is az a Linq?

Ma, amikor az alkalmazások többségében adatokat kezelünk, legyen szó adatbázisról, XML fájlról vagy akár egyszerű objektumról, még mindig meg kell küzdenünk azzal, hogy milyen az adatforrásunk, és hogy milyen egyedi nyelvvel, szintaktikával kezelhetjük őket. Így ha kiválasztunk egy adatforrást, például egy Microsoft SQL Server-t, akkor értenünk kell a T-SQL nyelvet, ha Oracle az adatforrás, akkor az ő nyelvén kell érteni, míg ha XML, akkor pedig ismernünk kell az XML egyedi struktúráját és lelkivilágát. Nincs egy egységes nyelv és környezet arra, hogy ugyanazzal a szintaktikával és módszertannal tudjuk lekérdezni egy meghatározott adatforrásból érkező adatokat. Ez így volt addig, míg meg nem jelent a LINQ.

A webet böngészve rengeteg megközelítést találunk arra, hogy mi is az a LINQ. Az alábbi definíciók kb. jól behatárolják azt, hogy mi is ez az új technológia.

  • A Linq egy egységes programozási modell, bármilyen adatforrásra nézve. A Linq lehetőséget biztosít, hogy egységes módon kérdezzünk le és módosítsunk adatokat, függetlenül az adatforrástól.
  • A Linq egy Tool, amelynek segítségével SQL lekérdezéseket ágyazhatunk be a kódunkba.
  • A Linq egy új, adat absztrakciós réteg.

Mind a 3 definíció helyes, és jó képet ad arról, hogy mi is ez a technológia.

A LINQ a Language Integrated Query rövidítése. Ahogy a neve is sugallja, Nyelvbe Ágyazott Lekérdezés, amivel magába a programozási nyelvbe ― amely legyen az C#, VB vagy bármilyen más .NET nyelv ― ágyazhatunk be a lekérdezéseinket.

image 

Egy kedves kollégám szerint azért nincs a LINQ-nak a magyar nyelvben külön rövidítése, mert a Nyelvbe Ágyazott Lekérdezés magyar rövidítése a NYÁL lenne.

 

Linq története

A Linq első változata (Technology Preview) 2005 szeptemberében jelent meg. Már akkor nagyon ígéretes kezdeményezés volt, de a 2007. novemberi megjelenése után már kétség se férhetett a Linq létjogosultságához. Az első változata csak néhány adatforrást támogatott. Ezek az alábbiak voltak:

  • Linq To Objects
  • Linq To ADO.NET
  • Linq To SQL
  • Linq To Dataset
  • Linq To Entities
  • Linq To XML

A Linq To Entities csak az ADO.NET Entity Framework-el jött ki 2008-ban. A Visual Studio 2010-től már alapból használható.

Persze a Linq megjelenése óta eltelt már jó néhány év, és mivel bárki fejleszthet magának Linq providert, ezért a netet böngészve találhatunk néhány nagyon jó Linq Providert. Pl: Linq To Sharepoint, Linq To Facebook, Linq To Bing vagy a nagy kedvenc magyar kezdeményezés, a Linq To C#.

A Linq egyik fontos tulajdonsága, hogy csak olyan sorozatokon, gyűjteményeken használható, amely megvalósítja az IEnumerable<T> vagy az IQueryable<T> interface-t. Ezek a sorozatok a lekérdezések végén egyszerűen átalakíthatók tömbökké (.ToArray()) vagy listákká (.ToList()).

Ahhoz, hogy a Linq megszülessen, a C# nyelven jó néhány változást kellett eszközölni. Maga a CLR (Common Language Runtime) nem változott, csak a nyelvi szintaktikán történtek változások. Tehát ami most a 3.0-ba belekerült, azt eddig is meg lehetett oldani, csak legfeljebb körülményesebb módon.

Ahhoz, hogy értsük, hogy mi és miért született meg a nyelvben, illetve hogy ezeket később rendeltetésszerűen használjuk, nézzük át a C# 3.0-nak az újdonságait.

Reklámok
Kategóriák:.NET, C#, Linq Címke: , ,
  1. 2011. június 7. kedd - 11:11

    “A Linq egy egységes programozási modell, bármilyen adatforrásra nézve. A Linq lehetőséget biztosít, hogy egységes módon kérdezzünk le és módosítsunk adatokat, függetlenül az adatforrástól.”

    Az “egy egységes” helyett elég az egységes, a második mondat gyakorlatilag egyenértékű az elsővel.

    “A Linq egy Tool, amelynek segítségével SQL lekérdezéseket ágyazhatunk be a kódunkba.”

    Tool helyett lehet nyugodtan eszköz, felesleges angolosítani. Amúgy maga a mondat is sok sebből vérzik, egyrészt nem közvetlen SQL lekérdezésekről van szó, másrészt a LINQ gyűjtőnév, amire te gondolsz az a LINQ To SQL/Entity.

    “Mind a 3 definíció helyes”

    Ilyenkor illik kiírni betűvel a számokat.

    ” Ahogy a neve is sugallja, Nyelvbe Ágyazott Lekérdezés, amivel magába a programozási nyelvbe ― amely legyen az C#, VB vagy bármilyen más .NET nyelv ― ágyazhatunk be a lekérdezéseinket.”

    Nana, maximum a forráskódba tehetjük azokat a lekérdezéseket, Redmondban zokon vennék ha átírnánk a nyelvet 😛
    Az “amely” felesleges, illetve a végén “ágyazhatjuk be” a helyes kifejezés.

    NYÁL – ez hatalmas, remélem elterjed 🙂

    “Az első változata csak néhány adatforrást támogatott. Ezek az alábbiak voltak:”

    Ezt nyugodtan írhattad volna egy mondatba. Az a néhány adatforrás most sem több, legalábbis hivatalosan nem.

    “A Linq To Entities csak az ADO.NET Entity Framework-el jött ki 2008-ban. A Visual Studio 2010-től már alapból használható.”

    Pontosabban a .NET FW 3.5 SP1/Visual Studio 2008 SP1 hozta el az EF-t. A második mondatban legyen “Visual Studio 2010-ben”.

    “Persze a Linq megjelenése óta eltelt már jó néhány év, és mivel bárki fejleszthet magának Linq providert, ezért a netet böngészve találhatunk néhány nagyon jó Linq Providert.”

    Jónéhány egy szó. Felesleges szóismétlés, elkopik az a szegény LINQ provider.

    “A Linq egyik fontos tulajdonsága, hogy csak olyan sorozatokon, gyűjteményeken használható, amely megvalósítja az IEnumerable vagy az IQueryable interface-t. Ezek a sorozatok a lekérdezések végén egyszerűen átalakíthatók tömbökké (.ToArray()) vagy listákká (.ToList()).”

    Ez a bekezdés itt abszolút irreleváns, ha ezt csak bevezetésnek szántad akkor nincs benne helye ilyen jellegű technikai részletnek.

    “Ahhoz, hogy a Linq megszülessen, a C# nyelven jó néhány változást kellett eszközölni. Maga a CLR (Common Language Runtime) nem változott, csak a nyelvi szintaktikán történtek változások.”

    Nem is annyira változtatást, inkább kiegészítést kellett tenniük. “Nyelvi szintaktikán” helyett legyen “a nyelv szintaxisán”, de igazából ez sem helytálló, mivel az addig érvényben lévő szintaxis nem változott, csak kiegészült. Azt sem merném állítani, hogy a CLR nem változott, nyilván erre is szükség lehetett, de persze nem látunk bele a forráskódba.

    “Ahhoz, hogy értsük, hogy mi és miért született meg a nyelvben, illetve hogy ezeket később rendeltetésszerűen használjuk, nézzük át a C# 3.0-nak az újdonságait.”

    A “miért született meg a nyelvben” helyett “miért került bele a nyelvbe” egy jobb lehetőség. A “-nak” nem kell a C# 3.0 után.

  2. 2011. június 7. kedd - 11:22

    :)Wow. Köszönöm. Javítom őket.

  3. Attila Érsek
    2011. június 7. kedd - 11:49

    Szia!

    A linq definícióját talán jobban megközelíti az alábbi angol mondat:
    “LINQ defines a set of method names (called standard query operators, or standard sequence operators), along with translation rules from so-called query expressions to expressions using these method names, lambda expressions and anonymous types.”

    Ha belegondolsz a Linq nem több, de nem is kevesebb mint definiált kulcsszavak halmaza (lekérdezést leíró kulcsszavak), valamint ezek kifejezésre, lambda kifejezésre és anonymous típusra való leképezésének szabályai.

    Egy kicsit félrevezető ebbe belekeverni szerintem bármilyen adatforrást, amikor a linq-val nem teszel mást mint egy kifejezés fát építesz egy jövőbeni érték meghatározására.

  4. flata
    2011. június 7. kedd - 14:02

    Keresgéltem, hogy mi az a Linq to C#, míg ebbe a nagyon jó listába nem botlottam:

    http://blog.linqexchange.com/index.php/links-to-linq-providers/

    🙂

    • 2011. június 7. kedd - 14:17

      Szép lista! Ezt felhasználom. Am a Linq To C# Novák István nevéhez is fűződik. (Grepton)

      • flata
        2011. június 8. szerda - 16:26

        Most látom, hogy a listában nincs is benne a legújabb kedvencem: Linq to Events 🙂

        Reactive Extensions (rx) címszó alatt tudsz rákeresni.

  5. 2011. június 7. kedd - 14:14

    Ez a NYÁL nagyon jó. :))

    Amúgy ez gondolom valami kedvcsináló-bevezető és ha már szóba került az SQL is akkor szerintem meg lehetne említeni azt, hogy az SQL lekérdezések meghívásával ellentétben a lekérdezést nem mint szöveget rakod össze hanem intellisense támogatással, fordító által ellenőrzötten. Így a szintaktikai hibák nem futási hanem fordítási időben derülnek ki.
    Mondjuk erre is rá lehet mondani hogy ismétlés mert mintha említve lett volna az SQL is meg a nyelvbe ágyazás is (NYÁL :)) de szerintem ezt nem lehet eléggé hangsúlyozni. Az összes ‘régi motoros’ ismerősöm aki elkezdett linq-val foglalkozni, mindenki az intellisense + a fordítási időben kiderülő szintaktikai hibák miatt kezdett el ismerkedni vele.

    Morzel

    • 2011. június 7. kedd - 14:16

      Lesz ilyen fejezet is a Linq To SQL bemutatásánál. Ott le lesz írva 🙂

  6. 2011. június 7. kedd - 20:47

    NYÁL ez epic 🙂 Arról van-e már szó, hogy a linq2sql maradni fog, vagy teljesen le fogja váltani az entity? Én úgy tudom, már nem fejlesztik.

  7. 2011. június 7. kedd - 20:47

    De durva még a nickem se tudom leírni

  8. 2011. június 7. kedd - 20:50

    Bocsi 😀 Úgy látszik, a nickes bejegyzésem előtti hozzászólásomat sem tudtam elküldeni 😀 Csak annyit akartam kérdezni, hogy linq2sql marad, vagy leváltja majd az entity? Tudtommal már nem fejlesztik.

    • flata
      2011. június 8. szerda - 16:28

      Nem fejlesztik tovább, az Entity Framework már leváltotta.

  1. No trackbacks yet.

Vélemény, hozzászólás?

Adatok megadása vagy bejelentkezés valamelyik ikonnal:

WordPress.com Logo

Hozzászólhat a WordPress.com felhasználói fiók használatával. Kilépés / Módosítás )

Twitter kép

Hozzászólhat a Twitter felhasználói fiók használatával. Kilépés / Módosítás )

Facebook kép

Hozzászólhat a Facebook felhasználói fiók használatával. Kilépés / Módosítás )

Google+ kép

Hozzászólhat a Google+ felhasználói fiók használatával. Kilépés / Módosítás )

Kapcsolódás: %s

%d blogger ezt kedveli: