LINQ da so’rovlar va metodlar sintaksisi

|
LINQ da so’rovlar va metodlar sintaksisi
|
bet | 8/11 | Sana | 02.02.2024 | Hajmi | 145,5 Kb. | | #150530 |
Bog'liq Linq texnologiyasi tavsifi-fayllar.orgLINQ da so’rovlar va metodlar sintaksisi
Integratsiyalashgan til soʻrovi (LINQ) hujjatlaridagi koʻpgina soʻrovlar LINQ deklarativ soʻrovlar sintaksisi yordamida yoziladi. Biroq, kod tuzilganda so'rovlar sintaksisi .NET umumiy til ish vaqti (CLR) uchun usul chaqiruvlariga o’girilishi kerak. Ushbu usul chaqiruvlari where, select, GroupBy, join, max va average kabi nomlarga ega bo'lgan standart so'rov operatorlarini chaqiradi. Ularni so'rovlar sintaksisi o'rniga metodlar sintaksisidan foydalanib to'g'ridan-to'g'ri chaqirish mumkin. So'rovlar sintaksisi va metodlar sintaksisi ma’noviy jihatdan bir xil, ammo ko'pchilik so'rov sintaksisini sodda va o'qilishi oson deb biladi. Ba'zi so'rovlar metod chaqiruvi sifatida ifodalanishi kerak. Misol uchun, belgilangan shartga mos keladigan elementlar sonini oladigan so'rovni ifodalash uchun metod chaqiruvidan foydalanishingiz kerak. Shuningdek, manba ketma-ketligida maksimal qiymatga ega bo'lgan elementni oladigan so'rov uchun metod chaqiruvidan foydalanishingiz kerak. System.Linq nom maydonidagi standart so'rov operatorlari uchun mos yozuvlar hujjatlari odatda metod sintaksisidan foydalanadi. Shuning uchun, LINQ so'rovlarini yozishni boshlaganda ham, so'rovlarda va so'rov ifodalarining o'zida metodlar sintaksisidan qanday foydalanishni bilish foydali bo'ladi.
Quyidagi misolda oddiy so'rov ifodasi va metodga asoslangan so'rov(method-based query) sifatida yozilgan ma’noviy ekvivalent so'rov ko'rsatilgan:
class QueryVMethodSyntax
{
static void Main()
{ int[] numbers = { 5, 10, 8, 3, 6, 12};
//Query syntax:
IEnumerable numQuery1 =
from num in numbers
where num % 2 == 0
orderby num
select num;
//Method syntax:
IEnumerable numQuery2 = numbers.Where(num => num % 2 == 0).OrderBy(n => n);
foreach (int i in numQuery1)
{
Console.Write(i + " ");
}
Console.WriteLine(System.Environment.NewLine);
foreach (int i in numQuery2)
{
Console.Write(i + " ");}
// Keep the console open in debug mode.
Console.WriteLine(System.Environment.NewLine);
Console.WriteLine("Press any key to exit");
Console.ReadKey();
}}
/*
Output:
6 8 10 12
6 8 10 12
*/
Ikki misoldan olingan natijalar bir xil. So'rov o'zgaruvchisining turi ikkala shaklda ham bir xil ekanligini ko'rishingiz mumkin: IEnumerable.
Metodga asoslangan so'rovni tushunish uchun uni batafsilroq ko'rib chiqamiz. Ifodaning o'ng tomonida, where bandi endi raqamlar ob'ektida misol usuli sifatida ifodalanganiga e'tibor bersak, IEnumerable tipiga ega. Agar Visual Studio IDE-da IntelliSense yakunlash ro'yxati chaqarilsa,nafaqat Where , balki Select, SelectMany, Join va Orderby kabi ko'plab boshqa usullarni ham ko'rish mumkin.Bularning barchasi standart so'rov operatorlari bo’lib hisoblanadi.
Garchi IEnumerable ushbu qo'shimcha usullarni o'z ichiga olishi uchun qayta aniqlanganga o'xshasada, lekin aslida bunday emas. Standart so'rov operatorlari kengaytma usullari deb ataladigan yangi usul (extension method)sifatida amalga oshiriladi. Standart so'rov operatorlari IEnumerable ni kengaytiradi va shuning uchun siz numbers.Where (....) yozishingiz mumkin bo’ladi.
|
| |