Linq texnologiyasi tavsifi


Download 124 Kb.
bet4/12
Sana02.02.2023
Hajmi124 Kb.
#1147259
1   2   3   4   5   6   7   8   9   ...   12
Bog'liq
hhhh

1.1.2-rasm
Oldingi misolda ma'lumotlar manbai massiv bo'lgani uchun u umumiy IEnumerable interfeysini bilvosita qo'llab-quvvatlaydi. Bu esa LINQ dan foydalanish imkonini yaratadi. So'rov foreach operatorida bajariladi va foreach IEnumerable yoki IEnumerable ni talab qiladi. IEnumerable yoki umumiy IQueryable ni qo'llab-quvvatlaydigan turlar so'rov turlari deb ataladi.
LINQ ma'lumotlar manbai sifatida xizmat qilishi uchun so'rov turi hech qanday o'zgartirish yoki maxsus ishlov berishni talab qilmaydi. Agar manba ma'lumotlari so'rov turi sifatida xotirada bo'lmasa, LINQ provayderi uni shu holatda ko'rsatishi kerak bo’ladi. Misol uchun, LINQ to XML - XML hujjatni Xelement so’rov turiga yuklaydi:
// Create a data source from an XML document.
// using System.Xml.Linq;
XElement contacts = XElement.Load(@"c:\myContactList.xml");
LINQ to SQL bilan odatda dizayn ustida ishlash vaqtida qo’lda yoki Visual Studio da LINQ to SQL asboblaridan foydalangan holda ob’ektga aloqador tip almashtirishni bajarish mumkin(mapping).So’rovlar ob’ektlarga yo’naltiriladi va dastur ishlashi vaqtida LINQ to SQL ma'lumotlar bazasi bilan aloqani boshqaradi. Quyidagi misolda Customers ma'lumotlar bazasidagi ma'lum bir jadvalni ifodalaydi va so'rov natijasining turi IQueryable IEnumerable dan kelib chiqadi:
Northwnd db = new Northwnd(@"c:\northwnd.mdf");
// Query for customers in London.
IQueryable custQuery =
from cust in db.Customers
where cust.City == "London"
select cust;
Muayyan turdagi ma'lumotlar manbalarini qanday yaratish haqida ko'proq ma'lumot olish uchun turli LINQ provayderlarga bog’liq bo’lgan hujjatlarga murojaat qilish maqsadga muvofiq bo’ladi. Biroq, asosiy qoida juda oddiy: LINQ ma'lumotlar manbai - bu umumiy IEnumerable interfeysini qo'llab-quvvatlaydigan har qanday ob’ekt yoki undan meros qilib olingan interfeysdir.
So'rov ma'lumotlar manbasidan yoki manbalardan qanday ma'lumotlarni olish kerakligini belgilaydi. Majburiy bo’lmasada so'rov shuningdek, bu ma'lumotni qaytarishdan oldin qanday saralanishi, guruhlanishi va shakllantirilishi kerakligini belgilaydi. So'rov so'rov o'zgaruvchisida saqlanadi va so'rov ifodasi bilan ishga tushiriladi. So'rovlarni yozishni osonlashtirish uchun C# da yangi so'rovlar sintaksislari kiritilgan.Oldingi misoldagi so'rov butun sonlar massividagi barcha juft raqamlarni qaytaradi. So'rov ifodasi uchta banddan iborat:from,where,select.
From kalit so’zi ma'lumotlar manbasini, where filtrlar qo'llanilishini va select esa qaytarilgan elementlar tipini belgilaydi.Hozircha muhim jihat shundaki, LINQ da so'rov o'zgaruvchisi hech qanday funksiyani bajarmaydi va hech qanday ma'lumot qaytarmaydi.So'rov keyinchalik bajarilganda natijalarni olish uchun undan zarur bo'lgan ma'lumotlarni saqlash uchun foydalaniladi.Yuqorida aytib o'tilganidek, so'rov o'zgaruvchisining o'zi so'rov buyruqlarini saqlaydi. So'rovning haqiqiy bajarilishi foreach qismidagi so'rov o'zgaruvchisi ustida takrorlash bajarilmagunicha kechiktiriladi. Ushbu kontseptsiya deferred execution  deb ataladi va quyidagi misollarda buni ko’rishimiz mumkin:
// Query execution.
foreach (int num in numQuery)
{
Console.Write("{0,1} ", num);
}
Foreach da, shuningdek, so'rov natijalari ham olinadi. Misol uchun, oldingi so'rovda num o'zgaruvchisi qaytarilgan ketma-ketlikda har bir qiymatni (bir vaqtning o'zida) ushlab tura oladi.Chunki so'rov o'zgaruvchisining o'zi hech qachon so'rov natijalarini saqlamaydi, siz uni xohlagancha tez-tez bajarishingiz mumkin. Misol uchun, sizda alohida dastur tomonidan doimiy ravishda yangilanib turadigan ma'lumotlar bazasi bo'lishi mumkin. Ilovangizda siz eng so'nggi ma'lumotlarni oladigan bitta so'rov yaratishingiz mumkin va har safar turli natijalarni olish uchun uni ma'lum vaqt oralig'ida qayta-qayta bajarishingiz mumkin. Bir qator manba elementlari bo'yicha yig’ish funksiyalarini bajaradigan so'rovlar avval ushbu elementlarni takrorlashi kerak. Bunday so‘rovlarga Count, Max, Average va First so‘rovlarini misol qilib keltirish mumkin. Ular aniq ravishda foreach siz ishlaydi, chunki so'rovning o'zi natijani qaytarish uchun foreach dan foydalanishi kerak. Shuni ham yodda tutingki, bu turdagi so'rovlar IEnumerable to'plamini emas, balki bitta qiymatni qaytaradi. Quyidagi so‘rov manbasi massivdagi juft sonlar nechtaligini qaytaradi:

var evenNumQuery =


from num in numbers
where (num % 2) == 0
select num;
Har qanday so'rovni darhol bajarishga uchun va uning natijalarini keshlash uchun siz ToList yoki ToArray usullarini chaqirishingiz mumkin.
List numQuery2 =
(from num in numbers
where (num % 2) == 0
select num).ToList();
// or like this:
// numQuery3 is still an int[]
var numQuery3 =
(from num in numbers
where (num % 2) == 0
select num).ToArray();
int evenNumCount = evenNumQuery.Count();


Download 124 Kb.

Do'stlaringiz bilan baham:
1   2   3   4   5   6   7   8   9   ...   12




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling