Iki šiol visuose LINQ su SQL pavyzdžiuose aš dirbau su duomenimis, gautais po filtravimo ar rūšiavimo. Realioms užduotims spręsti, kartais prisireikia paimti kažkokį skaičių duomenų ne nuo pradžios, pavyzdžiui, 10 elementų pradedant nuo 21. Tokioms situacijoms LINQ technologija turi metodus Skip() ir Take(). Pirmasis metodas praleidžia pirmus n elementų, o antrasis - išrenka ne daugiau negu m elementų. Minėtas pavyzdis galėtų atrodyti taip:

Šiame pavyzdyje norėčiau atkreipti dėmesį į du dalykus:

  • Nepaisant fakto, kad pirma aš išrenku visus produktus, o tik paskui kviečiu metodus Skip() ir Take() C# kode, sugeneruotas SQL sakinys išrinks tik nurodytą skaičių reikalingų įrašų. Tai atsitinka dėl to, kad SQL sakiniai generuojami ne pagal C# kodo eilėškumą, bet bandant iteruoti per rezultato elementus (kas mūsų atveju įvyksta nurodant DataSource).
  • Kitas svarbus faktas - dirbant su SQL Server 2005 / 2008, SQL sakiniuose naudojama ROW_NUMBER funkcija, dar labiau paspartinanti duomenų išrinkimą. Tuo galima įsitikinti naudojant 3 dalyje aprašytą SQL Server Query Visualizer:

Remiantis aprašytu pavyzdžiu, LINQ su SQL pagalba nesunkiai galima realizuoti puslapiavimo funkciją:

O pasinaudoti ja galima pavyzdžiui taip: aprašome puslapio dydį …

… ir pagal einamojo puslapio numerį pakraunamę tik reikiamus duomenis:

Čia puslapio numeris ateina kaip parametras, bet jis gali būti nustatomas ir kais būdais.

Taigi tiek būtų šiam kartui, tikiuosi LINQ su SQL straipsnių ciklas yra jums įdomus ir raginu visus nepamiršti balsuoti kaip.tik.ten ir topix.lt sistemose.

Rodyk draugams