ugrás a tartalomhoz

A LINQ segít lekérdezés-szerű adatműveletek elvégzésében

Hojtsy Gábor · 2005. Okt. 12. (Sze), 11.44
A legutóbbi Microsoft PDC konferencia a .NET programozóknak is hozott újdonságokat, és ezek egyike a LINQ (Language Integrated Query) projekt, mely lehetővé teszi, hogy nyelvi szinten használjuk a lekérdezéseket, akár SQL adatbázisokat, XML fájlokat vagy tömböket címzünk meg. A már most kipróbálható újítás lényege, hogy az ismert tagfüggvény hívási lánc helyett egy olvashatóbb szintaxist vezet be, kiterjesztve több adatforrásra a lehetőségeket.

A jelenleg C# és VB.NET nyelvekhez készült LINQ kiegészítő lehetővé teszi, hogy a következő egyszerű módon írhassunk lekérdezéseket:
using System;
using System.Query;
using System.Collections.Generic;

class app {
  static void Main() {
    string[] names = { "Burke", "Connor", "Frank", 
                       "Everett", "Albert", "George", 
                       "Harris", "David" };

    IEnumerable<string> expr = from s in names 
                               where s.Length == 5
                               orderby s
                               select s.ToUpper();

    foreach (string item in expr)
      Console.WriteLine(item);
  }
}

/* Kimenete:
BURKE
DAVID
FRANK
*/
Látható, hogy egy nyelvi szintű lekérdezést tudunk megvalósítani akár egy karaktersorozat tömbre is, de ugyanezt a támogatást használhatjuk XML fájlokra is az XLINQ segítségével, illetve adatbázisokra a DLINQ-nak köszönhetően. Úgy lehetséges a technológia ilyen széles körű alkalmazása, hogy a where, orderby, select és hasonló kulcsszavaknak tűnő kifejezések valójában a tömb műveleteiként vannak megvalósítva, így a fentivel ekvivalens kód lenne:
IEnumerable<string> expr = names 
                           .Where(s => s.Length == 5) 
                           .OrderBy(s => s)
                           .Select(s => s.ToUpper());
Nemcsak külön-külön nyúlhatunk ezekhez az adatforrásokhoz, hanem akár egy adatbázis táblát is összekapcsolhatunk egy XML állománnyal, és a metszetük alapján készíthetünk egy XML eredménysorozatot. Egy ehhez hasonló bonyolultabb példát mutat be John Udell. A lehetőségek száma tehát eléggé nyitott, és már sokan megpróbálták értelmezni a LINQ hatását más nyelvekre, vagy hasonló szerkezetek megvalósíthatóságát például Ruby esetén. Kezdetben azonban mindenképpen a hivatalos LINQ holnapot tudom ajánlani az érdeklődőknek, ahol egy bemutató videó, és számos alkalmazási példa is elérhető.