1.2 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();
}
}
Do'stlaringiz bilan baham:
|