Arama için LINQ
Coddy'nin C# Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 65 / 70.
Görev
KolayLINQ kullanarak Kütüphane Sisteminize güçlü arama özellikleri ekleyelim! Kullanıcıların kitapları çeşitli ölçütlere göre bulmasını sağlayan yöntemleri uygulayacaksınız: başlığa göre arama, yazara göre filtreleme ve mevcut kitapları bulma. LINQ, bu sorguları zarif ve okunabilir hâle getirir.
Mevcut proje yapınız üzerine geliştirmeye devam edeceksiniz:
Book.cs:Id,Title,AuthorveIsAvailableözelliklerine, ayrıcaBorrow()veReturn()yöntemlerine sahip Book sınıfınızı koruyun.User.cs:MaxBooks,CanBorrow()ve ödünç alınan kitapları yönetmeye yönelik yöntemler de dâhil olmak üzere, ödünç alma takibi işlevine sahip User sınıfınızı koruyun.Library.cs: LINQ destekli arama yöntemlerinizi buraya ekleyeceksiniz. Mevcut ödünç alma mantığınıza ek olarak şu arama özelliklerini uygulayın:SearchByTitle(string keyword)- başlığı anahtar kelimeyi içeren tüm kitapları döndürür (büyük/küçük harfe duyarsız)GetBooksByAuthor(string author)- belirli bir yazara ait tüm kitapları döndürür (tam eşleşme, büyük/küçük harfe duyarsız)GetAvailableBooks()- şu anda mevcut olan tüm kitapları döndürürGetBorrowedBooks()- şu anda ödünç alınmış olan tüm kitapları döndürür
Program.cs: Arama sorgularını işleyin ve sonuçları görüntüleyin.
Aşağıdaki girdileri alacaksınız:
- Kütüphane adı
- Kitap sayısı, ardından
id|title|authorbiçiminde her kitap - Başlangıç durumunu ayarlamak için ödünç alma işlemi sayısı, ardından her işlem için
bookId - Aşağıdaki biçimlerden birindeki arama komutu:
title|keyword- kitaplarda başlık anahtar kelimesine göre arama yaparauthor|name- yazara göre kitapları getiriravailable- mevcut tüm kitapları getirirborrowed- ödünç alınmış tüm kitapları getirir
Arama sonuçları için eşleşen her kitabı {Title} by {Author} biçiminde kendi satırına yazdırın. Hiçbir kitap eşleşmezse No books found yazdırın. Sonuçlar, kütüphane koleksiyonunda göründükleri sırayla yazdırılmalıdır.
Örneğin, girdiler şöyleyse:
City Library
5
B001|The Hobbit|Tolkien
B002|The Lord of the Rings|Tolkien
B003|1984|George Orwell
B004|Animal Farm|George Orwell
B005|The Silmarillion|Tolkien
2
B001
B003
author|TolkienÇıktı şöyle olmalıdır:
The Hobbit by Tolkien
The Lord of the Rings by Tolkien
The Silmarillion by TolkienAynı kütüphane kurulumu ile mevcut kitaplar aranırken başka bir örnek:
City Library
5
B001|The Hobbit|Tolkien
B002|The Lord of the Rings|Tolkien
B003|1984|George Orwell
B004|Animal Farm|George Orwell
B005|The Silmarillion|Tolkien
2
B001
B003
availableÇıktı şöyle olmalıdır:
The Lord of the Rings by Tolkien
Animal Farm by George Orwell
The Silmarillion by TolkienLINQ, karmaşık döngülerle yapılabilecek işlemleri anlamlı ve okunabilir sorgulara dönüştürür. Filtreleme için Where() ve sonuçları somutlaştırmak için ToList() gibi yöntemler, arama uygulamanızı temiz ve sürdürülebilir hâle getirecektir!
Kendin dene
using System;
using System.Collections.Generic;
namespace LibrarySystem
{
class Program
{
public static void Main(string[] args)
{
// Kütüphane adını oku
string libraryName = Console.ReadLine();
// Kütüphane adıyla bir Library örneği oluştur
Library library = new Library(libraryName);
// Kitap sayısını oku
int numBooks = Convert.ToInt32(Console.ReadLine());
// Kitapları oku ve ekle
for (int i = 0; i < numBooks; i++)
{
string bookInput = Console.ReadLine();
string[] bookParts = bookInput.Split('|');
string bookId = bookParts[0];
string bookTitle = bookParts[1];
string bookAuthor = bookParts[2];
Book book = new Book(bookId, bookTitle, bookAuthor);
library.AddBook(book);
}
// Başlangıç durumunu ayarlamak için ödünç alma işlemi sayısını oku
int numBorrows = Convert.ToInt32(Console.ReadLine());
// Ödünç alma işlemlerini işle (sadece kitap ID'leri)
for (int i = 0; i < numBorrows; i++)
{
string bookId = Console.ReadLine();
Book book = library.GetBookById(bookId);
if (book != null)
{
book.IsAvailable = false;
}
}
// Arama komutunu oku
string searchCommand = Console.ReadLine();
// Arama komutunu işle
List<Book> results = new List<Book>();
if (searchCommand == "available")
{
results = library.GetAvailableBooks();
}
else if (searchCommand == "borrowed")
{
results = library.GetBorrowedBooks();
}
else if (searchCommand.Contains("|"))
{
string[] parts = searchCommand.Split('|');
string searchType = parts[0];
string searchValue = parts[1];
if (searchType == "title")
{
results = library.SearchByTitle(searchValue);
}
else if (searchType == "author")
{
results = library.GetBooksByAuthor(searchValue);
}
}
// Sonuçları yazdır
if (results.Count == 0)
{
Console.WriteLine("No books found");
}
else
{
foreach (Book book in results)
{
Console.WriteLine($"{book.Title} by {book.Author}");
}
}
}
}
}
Nesne Yönelimli Programlama bölümündeki tüm dersler
1OOP Temelleri
Harici Dosyalarİsim Alanları ve YönergelerSınıf ve Nesnelere Giriş'this' Anahtar KelimesiMetotlar ve ParametrelerAlanlar ve ÖzelliklerYapıcı MetotlarNesne BaşlatıcılarÖzet - Basit Hesap Makinesi4Kalıtım
Temel Kalıtım (:) Sözdizimi'base' Anahtar KelimesiVirtual ve Override Anahtar KelimeleriSealed Sınıflar'object' Temel SınıfıÖzet - Çalışan Hiyerarşisi7İleri Düzey Özellikler
Operatör Aşırı Yüklemeİndeksleyiciler (this[])ToString() Geçersiz KılmaGenişletme MetotlarıÖzet - Özel Liste10Tasarım Kalıpları Bölüm 1
Tasarım Kalıplarına GirişThread-Safe SingletonFactory KalıbıObserver Kalıbı (Olaylar)Strategy Kalıbı2Özellikler ve Statik Üyeler
Otomatik Uygulanan ÖzelliklerSadece Okunur/Yazılır ÖzelliklerStatik Alanlar ve MetotlarStatik Sınıflarİfade Gövdeli Üyeler5Polimorfizm ve Arayüzler
Derleme vs Çalışma Zamanı PolimorfizmiArayüz vs Soyut SınıfÇoklu ArayüzlerBelirgin ArayüzlerUpcasting ve DowncastingÖzet - Şekil Hesaplayıcı8İleri Düzey OOP Kavramları
Kalıtım yerine KompozisyonGenerics (Sınıflar ve Metotlar)Delegates ve EventlerAttributes ve ReflectionIDisposable ve using İfadesiDependency Injection Temelleri11Tasarım Kalıpları Bölüm 2
Komut KalıbıAdaptör KalıbıDekoratör KalıbıŞablon Metot KalıbıDurum KalıbıKompozit Kalıbı3Sınıf Mimarisi
Örnek vs Statik Veri'readonly' ve 'const' Anahtar KelimeleriDestekleyici Alanlar (Backing Fields)Özet - Banka Hesabı Yöneticisi6Kapsülleme
Erişim BelirleyicilerKapsülleme için ÖzelliklerVeri Gizleme UygulamasıDeğişmezlik KalıplarıÖzet - Öğrenci Kayıtları9Değişken Argümanlar
'params' Anahtar Kelimesiİsteğe Bağlı Parametrelerİsimlendirilmiş ArgümanlarMetot Aşırı Yükleme12Proje: Kütüphane Sistemi
Proje YapısıKitap ve Kullanıcı ModelleriÖdünç Alma Sistemi MantığıArama için LINQKonsol Arayüzü / Yönetici ArayüzüBirim Testi (NUnit/xUnit)Kendi başına pratik yap: Online C# derleyicisi