A LINQ a Language Integrated Query szavakból képzett mozaikszó. C# esetén egy SQL-hez (Structured Query Language) hasonló halmaz orientált, erÅ‘sen tÃpusos lekérdezÅ‘ nyelvet valósÃt meg a nyelven belül. A LINQ erÅ‘sen épÃt megvalósÃtásában az Extension Method technológiára.
ElÅ‘nye, hogy könnyen tudunk vele nagy mennyiségű adaton műveleteket megvalósÃtani anélkül, hogy az implementációs mélységekbe bonyolódnánk. Ez egyfajta funkcionális paradigma megvalósÃtását teszi lehetÅ‘vé a C# nyelven belül.
További elÅ‘nye a LINQ technológiának, hogy bÅ‘vÃthetÅ‘. Létrehozhatunk LINQ szolgáltatókat, amelyek segÃtségével SQL szerveren tárolt adatok kérései is megÃrhatóak vele erÅ‘sen tÃpusos módon.
A technológia hátterében dinamikus kód generálás áll. Mikor megÃrunk egy LINQ kérést, akkor abból a háttérben egy Expression Tree fog generálódni, amit a generátor optimalizál. Ez fordul SQL szolgáltatók estén SQL utasÃtások sorozatára, vagy objektumokon elvégezhetÅ‘ metódushÃvásokká.
A keretrendszerbe az alábbi szolgáltatások vannak beépÃtve:
- Linq to Objects
- Linq to XML
A LINQ to SQL alapjáraton nem része a keretrendszernek. Ennek oka az, hogy az SQL szerverek gyorsan változnak, sokszÃnűek és változatonként jelentÅ‘sen eltérÅ‘ lehet az SQL dialektusuk és akkor még a támogatott funkciókról nem is beszéltünk.
SQL szerverek támogatására több osztálykönyvtár is létezik. Jelenleg a legjobban támogatott az Entity Framework Core, ami a Microsoft korábbi Entity Framework könyvtárának a multiplatform, nem csak a saját SQL szerverüket támogató változata. SegÃtségével nagyjából minden SQL szervert tudunk kezelni.
Régebbi "történelmi" projektek esetén még találkozhatunk Entity Framework-kel, ami csak Microsoft SQL szerverrel működik együtt, illetve NHybernate-tel is.
Az NHybernate a C# átirata a Javaban Ãródott Hybernate keretrendszernek. Korábban ez a keretrendszer támogatott az MS SQL szerveren kÃvül további szervereket LINQ to SQL számára. Az EF Core megjelenésével azonban okafogyottá vált a használata.
A könyv további szakaszaiban alapvetően a LINQ to Objects lesz részletesen tálalva. Ennek oka az, hogy a többi LINQ szolgáltatás is hasonló módon működik.
Aszinkron LINQ
A LINQ to Objects minden olyan kollekció tÃpussal működik, amely implementálja az IEnumerable<T> interfészt. A .NET 10 óta azonban az IAsyncEnumerable<T> tÃpusú kollekciók is támogatottak, az aszinkron névadási konvencióval, ami azt jelenti, hogy a hagyományos LINQ metódusokhoz képest az aszinkron változatok Async végzÅ‘déssel vannak elnevezve.