Linq operatorlari:
Barcha so'rovlar quyida joylashgan bir qator muhim kalit so'zlarga asoslangan umumiy shaklga ega.
A scending
|
by
|
descending
|
equals
|
from
|
group
|
in
|
into
|
join
|
let
|
on
|
orderby
|
select
|
where
|
|
|
Ular orasidan faqat so'rovlar boshida quyida joylashgan kalit so'zlar ishlatiladi.
from
|
group
|
join
|
let
|
orderby
|
select
|
where
|
|
So'rov select kalit so'z bilan boshlanishi kerak va from yoki group kalit so'z bilan tugaydi. Select operatori so'rov bo'yicha berilgan qiymat turini belgilaydi va group operatori ma'lumotlarni guruhlar bilan qaytaradi va har bir guruh alohida-alohida o'tkazilishi mumkin. Yuqoridagi misollardan kelib chiqqan holda, operator istalgan elementni so'rov bo'yicha qabul qilish uchun kerak bo'lgan mezonlarni belgilaydi. Boshqa operatorlar so'rovni aniqlashtirishga imkon beradi.
where operator yordamida kerakli qiymatlarni tanlash
Yuqorida aytib o'tilganidek, where operatori so'rov bo'yicha qaytarilgan ma'lumotlarni tanlash uchun xizmat qiladi. Avvalgi misollarda ushbu operator eng oddiy shaklda namoyish etildi, unda ma'lumotlarni tanlash uchun yagona shart ishlatiladi. Shu bilan birga, batafsil ma'lumot olish uchun bir nechta shartlar va ayniqsa, bir nechta where operatorlaridan foydalanish mumkin. Misol sifatida, quyidagi dasturni ko'rib chiqaylik, berilgan massivdan 10 dan kichik va musbat qiymatlarni olish masalasini ko’rib chiqaylik.
// Bir nechta where operatorini ishlatish.
using System;
using System.Linq;
class TwoWheres
{
static void Main()
{
int[] nums = { 1, -2, 3, -3, 0, -8, 12, 19, 6, 9, 10 };
// Musbat qiymatlarni va 10 dan kichik qiymatlarni olish uchun so'rov yaratish.
var posNums = from n in nums
where n > 0
where n < 10
select n;
Console.Write("10 dan kichik musbat sonlar: ");
// So'rovni bajarish va natijalarini chiqarish.
foreach (int i in posNums) Console.Write(i + " ");
Console.WriteLine();
Console.ReadKey();
}}
Ushbu dastur quyidagi natijani beradi.
10 dan kichik musbat sonlar: 1 3 6 9
Ko'rib turganingizdek, bu so'rov bo'yicha faqat 10 dan kichik musbat qiymatlar olindi.. Ushbu natijaga quyidagi ikkita where operator orqali erishildi.
where n > 0
where n < 10
orderby operatori bilan so'rov natijalarini saralash
Ko'pincha so'rov natijalari saralashni talab qiladi. Hisobni balanslash tartibida muddati o'tgan hisoblar ro'yxatni olish olish kerak bo’lishi mumkin: eng kattasidan kichikiga yoki mijozlarning ismlari ro'yxatini alifbo tartibida. LINQ vositasining so'rov natijalarini orderby operatori yordamida osongina tartiblash mumkin.
Orderby operatori so'rov natijalarini bir yoki bir nechta mezonlarga ko'ra tartiblashtirish uchun ishlatilish mumkin. Birinchidan, bitta elementni tartiblashning eng oddiy usulini ko'rib chiqamiz. Quyida so'rov natijalarini bitta mezon bo'yicha tartiblash uchun orderby operatorining umumiy shakli keltirilgan:
orderby element tartibi bu erda “element” saralash amalga oshiriladigan ma'lum elementni bildiradi. Bu ma'lumotlar manbasida saqlanadigan butun element yoki ushbu elementdagi bitta maydonning bir qismi bo'lishi mumkin. “tartibi” navbati bilan o'sib boruvchi yoki kamayib boruvchi tartibni, tegishli ravishda ascending yoki descending kalit so'zlarni majburiy ravishda qo'shish bilan amalga oshiriladi. Odatda, o’sish tartibida tartiblash uchun ascending kalit so'z odatda qo’yilmaydi.
Quyida int turidagi massivdan qiymatlarni olish uchun orderby operatoridan foydalanilgan dastur keltirilgan.
// orderby operatoridan foydalanish.
using System;
using System.Linq;
class OrderbyDemo
{
static void Main()
{
int[] nums = { 10, -19, 4, 7, 2, -5, 0 };
// Saralangan tartibda qiymatlarni olish uchun so'rov yaratish
var posNums = from n in nums
orderby n
select n;
Console.Write("O'sish qiymatlari: ");
// So'rovni ishga tushirish va natijalarini ko'rsatish.
foreach (int i in posNums) Console.Write(i + " ");
Console.WriteLine();
Console.ReadKey();
}
}
Ushbu dasturni bajarishda quyidagi natija olinadi.
O'sish qiymatlari: -19 -5 0 2 4 7 10
Quyida o’sish tartibida tartiblangan qiymatni kamayish tartibini o'zgartirish uchun, descending kalit so'z yozish kifoya qiladi.
var posNums = from n in nums
orderby n descending
select n;
Ushbu so'rovni bajargandan so’ng, qiymatlarni teskari tartibda olasiz.
Ko'pincha so'rov natijalarini saralash yagona mezonga muvofiq amalga oshiriladi. Shunga qaramay, orderby operatorining quyidagi shakli bir necha mezonlarga ko'ra tartiblash uchun xizmat qiladi.
orderby element_a yo'nalishi, element_b yo'nalishi, element_c yo'nalishi, …
// orderby operatori yordamida so'rov natijalarini
//bir nechta mezonlar bo'yicha tartiblang
using System;
using System.Linq;
class Account
{
public string Fam { get; private set; }
public string Ism { get; private set; }
public double Balans { get; private set; }
public string AccountNumber { get; private set; }
public Account(string fn, string In, string accnum, double b)
{
Fam = fn;
Ism = In;
AccountNumber = accnum;
Balans = b;
}
}
class OrderbyDemo
{
static void Main()
{
// Manba ma'lumotlarini yaratish.
Account[] accounts =
{ new Account("Abdiazizova", "Nilufar", "132CK", 100.23),
new Account("Ashurova", "Lobar", "454MM", 1923.85),
new Account("Latipov", "Sardor", "434СК", -123.32),
new Account("Qurbonov", "Zokir", "543ММ", 5017.40),
new Account("Sattorov", "O'ral", "547CD", 34955.79),
new Account("Yusufov", "Umidjon", "843СК", 345.00),
new Account("Pitinov", "Ozodbek", "156СК", 423.32),
new Account("Sodikov", "Abubakir", "325ММ", 567.40),
new Account("Bahromov", "Ozodbek", "156CD", 145.19),
new Account("Bahromov", "Ozodbek", "897CK", 3223.15),
};
// Tartiblangan tartibda bank hisob varaqlari to'g'risida ma'lumot olish uchun so'rov yaratish.
//Ushbu ma'lumotni avval ism, keyin familiya va hisob balansi bo'yicha tartiblash.
var accinfo = from acc in accounts
orderby acc.Ism, acc.Fam, acc.Balans
select acc;
Console.WriteLine("Saralangan ma'lumotlar: ");
string str = "";
// So'rovni ishga tushirish va natijalarini ko'rsatish,
int i = 1;
foreach (Account acc in accinfo)
{
if (str != acc.Fam)
{
str = acc.Fam;
}
Console.WriteLine(i + " {0}, {1}\tHisob nomeri: {2}, {3}",
acc.Ism, acc.Fam, acc.AccountNumber, acc.Balans);
i++;
}
Console.ReadKey();
}
}
Parallel linq metodlari
Integrated Query (LINQ) deklarativ modelni taqdim etadi,kabi ma'lumotlar ketma-ketligini so'rashga imkon beradi xotiradagi to'plamlar, XML hujjatlari va ma'lumotlar bazasi ma'lumotlari. Xarakter Ko'p so'rovlar ularni osongina parallellashtirish mumkinligini anglatadi. Ko'pchilik so'rovlar har bir element uchun bir xil harakatlar guruhini bajaradi yig'ish. Agar ushbu harakatlarning barchasi mustaqil bo'lsa, nojo'ya ta'sirlarsiz Ko'pincha siz ularni paydo bo'lish tartibidan kelib chiqadigan effektlarni ko'rishingiz mumkin birgalikda ishlash orqali samaradorlikning katta o'sishiga erishish bir nechta protsessor yadrolari o'rtasida.
Ushbu .NET Framework versiyasining 4.0 skriptlarini qo'llab-quvvatlash uchun
Parallel LINQ (PLINQ) bilan tanishtirildi. PLINQ xuddi shu standartni ta'minlaydi
so'rov operatorlari va LINQ kabi so'rovlar ifoda sintaksisi. Asosiyfarq shundaki, dastlabki ma'lumotlarni qismlarga bo'lish mumkin ma'lumotlarning dekompozitsiyasidan foydalanish. Bu kichik ma'lumotlar guruhlari potentsial barcha mavjud CPU yadrolari tomonidan boshqariladi. Plinq bor bu to'g'ridan-to'g'ri almashtirish emasligini anglatuvchi ba'zi cheklovlar LINQ so'rovlar uchun standart parametr bo'lolmaydi. Kalit Cheklovlar soni individualni qayta ishlashning yon ta'siri manba ketma-ketligidagi elementlar, masalan, ishlov berish natijasida Bir elementning boshqasiga bog'liqligi oldindan aytib bo'lmaydigan 90 ga olib kelishi mumkin natijalar. Buning sababi asl elementlar odatda yo'q asl tartibda ishlov beriladi. Ikkinchi cheklov PLINQ xotira ichidagi ma'lumotlarga o'xshashlikni ta'minlaydi to'plamlar yoki oldindan yuklangan XML. LINQ so'rovini parallel ravishda qanday o'zgartirish mumkinligini ko'rsatish ishlov berish, avval siz seriya versiyasini olishingiz kerak. Quyidagi kodda Juda oddiy so'rov ko'rsatilgan. Bu erda biz o'z ichiga olgan qatordan boshlaymiz birdan o'ngacha bo'lgan butun sonlar. Select operatoridan foydalanib, biz loyihalashtiramiz uni asl kvadratlarini o'z ichiga olgan yangi ketma-ketlikka qadriyatlar.
Do'stlaringiz bilan baham: |