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 yetenekleri ekleyelim! Kullanıcıların çeşitli kriterlere göre kitap bulmasını sağlayan yöntemler uygulayacaksınız - başlığa göre arama, yazara göre filtreleme ve mevcut kitapları bulma. LINQ, bu sorguları zarif ve okunabilir hale getirir.
Mevcut proje yapınızın üzerine inşa etmeye devam edeceksiniz:
Book.cs:Id,Title,AuthorveIsAvailableözelliklerinin yanı sıraBorrow()veReturn()metotlarını içeren Book sınıfınızı koruyun.User.cs:MaxBooks,CanBorrow()ve ödünç alınan kitapları yönetme metotları dahil olmak üzere ödünç alma takip işlevine sahip User sınıfınızı koruyun.Library.cs: LINQ destekli arama metotlarınızı buraya ekleyeceksiniz. Mevcut ödünç alma mantığınıza ek olarak, şu arama yeteneklerini uygulayın:SearchByTitle(string keyword)- Başlığı anahtar kelimeyi içeren tüm kitapları döndürür (büyük/küçük harf 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 harf 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|authorformatında her bir kitap - Başlangıç durumunu ayarlamak için ödünç alma işlemi sayısı, ardından her biri
bookIdolarak - Şu formatlardan birinde bir arama komutu:
title|keyword- kitapları başlık anahtar kelimesine göre araauthor|name- kitapları yazara göre getiravailable- tüm mevcut kitapları getirborrowed- tüm ödünç alınmış kitapları getir
Arama sonuçları için, eşleşen her kitabı kendi satırında {Title} by {Author} formatında 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 şunlarsa:
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 kurulumuyla ancak mevcut kitapları arayan 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üleri anlamlı ve okunabilir sorgulara dönüştürür. Filtreleme için Where() ve sonuçları somutlaştırmak için ToList() gibi metotlar, arama uygulamanızı temiz ve bakımı kolay hale 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