LINQ katmanı
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
-
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
-
Where çağrısını tamamla
return _books.____(b => b.Author == author);Cevabı göster
return _books.Where(b => b.Author == author); -
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.