2.3 C# dagi LINQ ni qo’llab quvvatlovchi jihatlar Ushbu bo'limda C# 3.0 da kiritilgan yangi til konstruktsiyalari taqdim etiladi. Garchi bu yangi funksiyalarning barchasi LINQ so‘rovlari bilan bir darajada foydalanilgan bo‘lsa-da, ular LINQ bilan cheklanmaydi va ularni istalgan kontekstda foydalanish mumkin.
So'rov ifodalari IEnumerable to'plamlari orqali so'rov qilish uchun SQL yoki XQuery ga o'xshash deklarativ sintaksisdan foydalanadi. Kompilyatsiya vaqtida so'rovlar sintaksisi LINQ provayderi tomonidan standart so'rovlar operatorini kengaytirish usullarini amalga oshirish uchun metod chaqiruvlariga aylantiriladi. Ilovalar foydalanish direktivasi bilan tegishli nomlar maydonini ko'rsatish orqali ko'lamdagi standart so'rov operatorlarini boshqaradi. Quyidagi so'rov ifodasi satrlar ro’yxatini qaytaradi, ularni satrdagi birinchi belgi bo'yicha guruhlarga ajratadi va guruhlarni tartibga soladi.
var query = from str in stringArray
group str by str[0] into stringGroup
orderby stringGroup.Key
select stringGroup;
Oʻzgaruvchini eʼlon qilish va ishga tushirishda tipni aniq koʻrsatish oʻrniga, bu yerda koʻrsatilganidek, kompilyatorga tipni aniqlash va belgilashni koʻrsatish uchun var modifikatoridan foydalanish ham mumkin:
var number = 5;
var name = "Virginia";
var query = from str in stringArray
where str[0] == 'm'
select str;
Var sifatida e'lon qilingan o'zgaruvchilar, turini aniq ko'rsatgan o'zgaruvchilar kabi qat’iy tarzda kiritiladi. Var dan foydalanish anonim turlarni yaratishga imkon beradi, lekin u faqat mahalliy(local) o'zgaruvchilar uchun ishlatilishi mumkin. Massivlar yashirin tarzda ham e'lon qilinishi mumkin.
Standart so'rov operatorlari LINQ ni tashkil etuvchi usullardir. Ushbu usullarning aksariyati ketma-ketlikda ishlaydi, bunda ketma-ketlik tipi IEnumerable interfeysini yoki IQueryable interfeysini amalga oshiradigan ob'ektdir. Standart so'rov operatorlari filtrlash, proyeksiyalash, yig'ish, saralash va boshqalarni o'z ichiga olgan so'rovlar imkoniyatlarini taqdim etadi.
LINQ standart soʻrov operatorlarining ikkita toʻplami mavjud: biri IEnumerable tipidagi ob’ektlarda, ikkinchisi IQueryable tipidagi obyektlarda ishlaydi. Har bir to'plamni tashkil etuvchi usullar mos ravishda Enumerable va Queryable sinflarining statik a'zolaridir. Ular o'zlari faoliyat ko'rsatadigan turdagi kengaytirish usullari sifatida aniqlanadi. Kengaytma usullarini statik usul sintaksisi yoki misol usuli sintaksisi yordamida chaqirish mumkin. Bundan tashqari, bir nechta standart so'rovlar operatori metodlari IEnumerable yoki IQueryable ga asoslanganidan boshqa tiplarda ham ishlaydi. Enumerable tipi IEnumerable tipidagi ob'ektlarda ishlaydigan ikkita shunday metodni belgilaydi. Ushbu Cast(IEnumerable) va OfType(IEnumerable) usullar LINQ da so'rov qilinadigan parametrsiz yoki umumiy bo'lmagan to'plamni ishga tushirish imkonini beradi. Ular bu ob'ektlar to'plamini yaratish orqali amalga oshiradilar. Queryable klassi IQueryable tipidagi ob'ektlarda ishlaydigan Cast(IQueryable) va OfType(IQueryable) ikkita bir-biriga yaqin usulni belgilaydi.
Standart so'rov operatorlari bir xil qiymatni yoki qiymatlar ketma-ketligini qaytarishiga qarab, ularni bajarish vaqtlari farqlanadi. Yagona qiymat qaytaradigan usullar (masalan, Average va Sum) darhol bajariladi. Ketma-ketlikni qaytaradigan usullar so'rovlar bajarilishini kechiktiradi va sanab o'tiladigan ob'ektni qaytaradi.
Xotiradagi to'plamlarda ishlaydigan metodlar uchun, ya'ni IEnumerable ni kengaytiruvchi metodlar uchun qaytarilgan sanab o'tiladigan ob’ekt usulga o'tkazilgan argumentlarni saqlaydi. Ushbu ob’ekt sanab o'tilganda, so'rov operatorining mantig'i qo'llaniladi va so'rov natijalari qaytariladi.
Aksincha, IQueryable ni kengaytiruvchi usullar hech qanday so'rov harakatini amalga oshirmaydi. Ular bajariladigan so'rovni ifodalovchi ifoda sxemasini quradilar. So'rovlarni qayta ishlash IQueryable manba ob'ekti tomonidan amalga oshiriladi.So'rov usullariga qo'ng'iroqlar bitta so'rovda birlashtirilishi mumkin, bu esa so'rovlarni murakkablashtirishga imkon beradi.
Quyidagi kod misoli ketma-ketlik haqida ma'lumot olish uchun standart so'rov operatorlaridan qanday foydalanish mumkinligini ko'rsatadi:
string sentence = "the quick brown fox jumps over the lazy dog";
// Split the string into individual words to create a collection.
string[] words = sentence.Split(' ');
// Using query expression syntax.
var query = from word in words
group word.ToUpper() by word.Length into gr
orderby gr.Key
select new { Length = gr.Key, Words = gr };
// Using method-based query syntax.
var query2 = words.
GroupBy(w => w.Length, w => w.ToUpper()).
Select(g => new { Length = g.Key, Words = g }).
OrderBy(o => o.Length);
foreach (var obj in query)
{
Console.WriteLine("Words of length {0}:", obj.Length);
foreach (string word in obj.Words)
Console.WriteLine(word);
}
// This code example produces the following output:
//
// Words of length 3:
// THE
// FOX
// THE
// DOG
// Words of length 4:
// OVER
// LAZY
// Words of length 5:
// QUICK
// BROWN
// JUMPS