Linq texnologiyasi tavsifi
Download 124 Kb.
|
hhhh
1.1.2-rasm
Oldingi misolda ma'lumotlar manbai massiv bo'lgani uchun u umumiy IEnumerable 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 Northwnd db = new Northwnd(@"c:\northwnd.mdf"); // Query for customers in London. IQueryable 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 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 (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: |
Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling
ma'muriyatiga murojaat qiling