- Lambda ifadəsini (
x => ...) oxumaq və yazmaq Where,SelectvəOrderByilə kolleksiyanı filtrləmək, çevirmək və sıralamaqSum,Average,Count,AnyvəGroupByilə nəticələri toplamaq- Təxirə salınmış icranı və
ToList()-in rolunu izah etmək
Sinfin qiymətləri siyahısında 80-dən yuxarı bal toplayanları tapmaq, onları azalan sıra ilə düzmək və yalnız adlarını götürmək lazımdır. Dövrlərlə bu, yeni siyahılar, if-lər və sıralama kodu deməkdir. LINQ (Language Integrated Query — dilə daxil edilmiş sorğu) ilə isə eyni iş bir neçə oxunaqlı sətirdə görülür, sanki kompüterə sadəcə nə istədiyini deyirsən.
Lambda ifadələri
Adsız qısa funksiya: oxdan (=>) solda parametr, sağda nəticə yazılır. n => n * 2 «n-i al, n · 2 qaytar» deməkdir, s => s.Score >= 80 isə «şagirdin balı 80 və ya çoxdurmu?» sualına true/false cavabı verir.
LINQ metodları istənilən kolleksiya ilə işləyir — massiv, List<T>, lüğət — və arqument kimi lambda qəbul edir. Onlar orijinal kolleksiyanı dəyişmir, yeni nəticə qaytarır. Aşağıdakı nümunədə Where şərtə uyğun elementləri seçir, Select hər elementi çevirir, OrderBy isə sıralayır.
int[] numbers = [5, 12, 8, 3, 20, 7];
var evens = numbers.Where(n => n % 2 == 0);
var doubled = numbers.Select(n => n * 2);
var sorted = numbers.OrderBy(n => n);
Console.WriteLine(string.Join(", ", evens));
Console.WriteLine(string.Join(", ", doubled));
Console.WriteLine(string.Join(", ", sorted));
Console.WriteLine($"Sum: {numbers.Sum()}, max: {numbers.Max()}");
Console.WriteLine($"Greater than 6: {numbers.Count(n => n > 6)}");12, 8, 20 10, 24, 16, 6, 40, 14 3, 5, 7, 8, 12, 20 Sum: 55, max: 20 Greater than 6: 4
Metodları zəncirləmək
Hər LINQ metodu yeni ardıcıllıq qaytardığı üçün növbəti metodu dərhal onun üzərində çağırmaq olar. Belə zəncir yuxarıdan aşağıya bir cümlə kimi oxunur: «80 və daha çox bal alanları seç, bala görə azalan sıra ilə düz, adlarını götür». Zənciri adətən hər metod ayrı sətirdə olmaqla yazırlar.
using System.Globalization;
CultureInfo.CurrentCulture = CultureInfo.InvariantCulture;
List<Student> students =
[
new("Aysel", 95), new("Murad", 78), new("Leyla", 88),
new("Elvin", 45), new("Nigar", 91)
];
var topNames = students
.Where(s => s.Score >= 80)
.OrderByDescending(s => s.Score)
.Select(s => s.Name);
Console.WriteLine(string.Join(", ", topNames));
Console.WriteLine($"Average: {students.Average(s => s.Score):F1}");
Console.WriteLine($"Everyone passed: {students.All(s => s.Score >= 50)}");
Console.WriteLine($"Anyone above 90: {students.Any(s => s.Score > 90)}");
Console.WriteLine($"Best: {students.OrderByDescending(s => s.Score).First().Name}");
record Student(string Name, int Score);Aysel, Nigar, Leyla Average: 79.4 Everyone passed: False Anyone above 90: True Best: Aysel
| Metod | Nə edir |
|---|---|
Where(x => ...) | şərtə uyğun elementləri seçir |
Select(x => ...) | hər elementi başqa qiymətə çevirir |
OrderBy / OrderByDescending | artan / azalan sıra ilə düzür |
Sum, Average, Min, Max, Count | cəm, orta, ən kiçik, ən böyük, say |
First / FirstOrDefault | ilk elementi verir; boşdursa xəta / null |
Any / All | heç olmasa biri / hamısı şərtə uyğundurmu |
GroupBy(x => ...) | elementləri açara görə qruplaşdırır |
ToList() | nəticəni hazır siyahıya çevirir |
Qruplaşdırma
GroupBy elementləri ümumi açara görə qruplara bölür: məsələn, məhsulları kateqoriyaya görə. Hər qrupun Key xassəsi (açar) var və qrupun özü də kolleksiyadır, ona görə onun üzərində Count və Sum çağırmaq olar. FirstOrDefault isə uyğun element tapılmayanda xəta atmır, null qaytarır.
List<Product> products =
[
new("Laptop", "Electronics", 1500),
new("Pen", "Stationery", 2),
new("Phone", "Electronics", 900),
new("Notebook", "Stationery", 5),
new("Mouse", "Accessories", 25)
];
var groups = products
.GroupBy(p => p.Category)
.OrderBy(g => g.Key);
foreach (var g in groups)
Console.WriteLine($"{g.Key}: {g.Count()} item(s), total {g.Sum(p => p.Price)} AZN");
Product? cheap = products.FirstOrDefault(p => p.Price < 1);
Console.WriteLine(cheap is null ? "No product under 1 AZN" : cheap.Name);
record Product(string Name, string Category, decimal Price);Accessories: 1 item(s), total 25 AZN Electronics: 2 item(s), total 2400 AZN Stationery: 2 item(s), total 7 AZN No product under 1 AZN
Product? tipindəki sual işarəsi dəyişənin null ola biləcəyini bildirir.OrderBy səni sıralama alqoritmi yazmaqdan azad edir. Burada sadə alqoritmlərdən birinin addım-addım necə işlədiyinə bax.Təxirə salınmış icra
Where və Select çağırılanda heç nə hesablanmır — yalnız «resept» yadda saxlanılır. Sorğu nəticəni həqiqətən istəyəndə icra olunur: foreach-də, string.Join-da və ya Sum kimi metodlarda. Buna təxirə salınmış icra deyilir. Nəticəni həmin an «dondurmaq» üçün ToList() çağır.
List<int> scores = [50, 70, 90];
var high = scores.Where(s => s > 60);
var snapshot = scores.Where(s => s > 60).ToList();
scores.Add(100);
Console.WriteLine(string.Join(", ", high));
Console.WriteLine(string.Join(", ", snapshot));70, 90, 100 70, 90
high sorğusu 100 əlavə olunandan sonra icra olundu, snapshot isə əvvəlcədən hazırlanmışdı.Əsas fikirlər
- Lambda — adsız qısa funksiyadır:
n => n * 2. Wherefiltrləyir,Selectçevirir,OrderBy/OrderByDescendingsıralayır.Sum,Average,Max,Count,Any,Allbütün kolleksiyadan bir cavab çıxarır.- LINQ orijinal kolleksiyanı dəyişmir; metodları zəncir kimi birləşdirmək olar.
- Sorğu nəticə istənəndə icra olunur;
ToList()nəticəni dərhal hazırlayır.
Özünü yoxla
10 sual. Hər düzgün cavab XP qazandırır.
int[] a = [1, 2, 3, 4]; olarsa, a.Where(n => n > 2).Sum() nəyə bərabərdir?