CodeBlanks Logo Icon CodeBlanks

LINQ katmanı

C# kursu · Orta seviye · Ders 114/116

Veri süzme ve raporlama için LINQ kullanırsın.

LINQ ile kitap arama

Library sınıfına bir FindByAuthor metodu eklersen LINQ Where ile yazar araması yapabilirsin. Yöntem imzası: public IEnumerable<Book> FindByAuthor(string author).

Gövdede _books.Where(b => b.Author == author) yazarsın. Bu, koşula uyan kitapları tembel bir dizi olarak döndürür; çağıran foreach başlatana kadar üretilmez.

Tembel dizi ve foreach

Where sonucu bir IEnumerable<Book>'tur; hemen hesaplanmaz. foreach her adımda bir sonraki eşleşmeyi üretir. Büyük listelerde bu, bellek tasarrufu sağlar.

Sonuç boş da olabilir; foreach o zaman hiç dönmeyebilir. FirstOrDefault() ile tek bir sonucu da alabilirsin; bu, boşsa null döndürür.

Uygulama FindByAuthor metodunu ekle

Aşağıdaki Library sınıfına FindByAuthor metodu ekle: Where ile yazara göre süzsün ve IEnumerable<Book> döndürsün. Main içinde iki kitap ekle, FindByAuthor çağır ve foreach ile başlıkları yazdır.

Örnek çözümü göster
public IEnumerable<Book> FindByAuthor(string author) { return _books.Where(b => b.Author == author); } yaz. Main'de foreach (var b in lib.FindByAuthor("Dostoyevski")) Console.WriteLine(b.Title);
Örnek çözüm:
using System;
using System.Collections.Generic;
using System.Linq;

class Book
{
    public string Title { get; set; }
    public string Author { get; set; }
}

class Library
{
    private List<Book> _books = new List<Book>();

    public void Add(Book b) => _books.Add(b);

    public int Count => _books.Count;

    public IEnumerable<Book> FindByAuthor(string author)
    {
        return _books.Where(b => b.Author == author);
    }
}

class Program
{
    static void Main()
    {
        var lib = new Library();
        lib.Add(new Book { Title = "Suç ve Ceza", Author = "Dostoyevski" });
        lib.Add(new Book { Title = "Karamazov Kardeşler", Author = "Dostoyevski" });
        foreach (var b in lib.FindByAuthor("Dostoyevski"))
        {
            Console.WriteLine(b.Title);
        }
    }
}

Kendini test et

  1. LINQ işlecini davranışa eşle

    Where
    Koşula göre süz
    Select
    Biçim dönüştür
    OrderBy
    Sırala
    Count
    Adet ver
  2. Where çağrısını tamamla

    return _books.____(b => b.Author == author);
    Cevabı göster
    return _books.Where(b => b.Author == author);
  3. Where ne döndürür?

    • Tek bir değer
    • Sıralı bir dizi
    • Koşula uyan elemanlar
    • Gruplar
    Cevabı göster

    Koşula uyan elemanlar — Doğru. Where koşula uyan elemanları tembel dizi olarak verir.

Orta seviye bölümündeki tüm dersler