Linq SingleOrDefault Kullanımı

Posted by

Merhaba arkadaşlar, bu yazımda sizlere Linq SingleOrDefault Kullanımı konusundan bahsedeceğim. SingleOrDefault metodu koleksiyonda, listede bulunan değerlerden şartımıza uyan değeri tek kayıt olarak bize geri döner. FirstOrDefault metodu ile aynı gibi düşünülebilir fakat FirstOrDefault metodu ilk değeri döndürürken, şart koymadan SingleOrDefault metodumuzu kullanmaya çalışırsak uygulamamız “Sıra birden çok öğe içeriyor” şeklinde hata verecektir. Eğer şarta uygun bir veri yok ise de default değer döner.

Örnek kod ile SingleOrDefault metodu kullanımını inceleyelim.

Linq FirstOrDefault Kullanımı yazısındaki örneğimize benzer bir kod yazacağız.

Bir Category nesnesi oluşturuyoruz.

public class Category
{
  public int Id { get; set; }
  public string Name { get; set; }
  public bool IsActive {get; set;}
}

Kategori nesnemizi oluşturduktan sonra örnek bir liste oluşturuyoruz.

List<Category> categories = new List<Category>() {
    new Category { Id = 1, Name="Kategori 1",IsActive=true },
    new Category { Id = 2, Name="Kategori 2",IsActive=true },
    new Category { Id = 3, Name="Kategori 3",IsActive=false }
};
Category category = categories.SingleOrDefault(x=> x.IsActive == false);

Listemizi oluşturduk ve içerisinde 3 adet kategori bulunuyor. 2 tane aktif, 1 tane de pasif kategorimiz bulunuyor. Şimdi bu kategori listesinden pasif olan kategori değerini SingleOrDefault metodu ile getireceğiz. Yani Kategori 3 değerimiz bize dönecektir. Eğer aktif olan kategoriler üzerinde sorgulama yaparsak 2 adet aktif kategori olduğu için Sıra birden çok eşleşen öğe bulunuyor hatası verecektir. Eğer kodumuzu FirstOrDefault metodu ile yazsaydık herhangi bir hata vermeyecek ve birden çok değer gelse de her zaman bize ilk değeri geri dönecekti.

if (category != null)
{
    Console.WriteLine($"Id: {category.Id} - Name: {category.Name}");
}

Son olarak da gelen değerimizi NULL kontrolü yaparak ilgili değerlerini ekrana yazdırdık.

Umarım faydalı olur.

Bir sonraki yazıda görüşmek üzere…

Leave a Reply

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir