C# Linq FirstOrDefault Kullanımı
C# programlama dilinde, Linq bileşeni içindeki FirstOrDefault() metodu, First() metodu gibi isteğe bağlı bir koşul için koleksiyondaki ilk öğeyi döndürür. Aralarındaki fark, First() metodu bir kayıt bulamaz ise hata verirken, FirstOrDefault() metodu varsayılan değeri döndürür. Bu, başvuru türleri için NULL ve değer türleri için ilgili varsayılan (default) değerdir.
Aşağıdaki örneği inceleyelim..
İlk olarak koleksiyonumuzun (collection) oluşturulduğu Ogrenci ve Sinif class larımızı hazırlayalım.
class Ogrenci
{
public int Id { get; set; }
public string Ad { get; set; }
}
class Sinif
{
public readonly List ogrenciler;
public Sinif()
{
this.ogrenciler = OgrenciYarat().ToList();
}
private IEnumerable OgrenciYarat()
{
yield return new Ogrenci { Id = 1, Ad = "Ali" };
yield return new Ogrenci { Id = 2, Ad = "Erdem" };
yield return new Ogrenci { Id = 3, Ad = "Ayşe" };
yield return new Ogrenci { Id = 4, Ad = "Lale" };
yield return new Ogrenci { Id = 5, Ad = "Gül" };
yield return new Ogrenci { Id = 6, Ad = "Osman" };
yield return new Ogrenci { Id = 7, Ad = "Irmak" };
yield return new Ogrenci { Id = 8, Ad = "Tarık" };
}
}
Oluşturulan sınıflarımızla birlikte FirstOrDefault() metodumuzu kullanalım. Ayrıca First() metodu ile aralarındaki farka bakalım..
Sinif sinif = new Sinif();
var kayit = sinif.ogrenciler.FirstOrDefault(x => x.Id == 1);
var kayit2 = sinif.ogrenciler.FirstOrDefault(x => x.Id == 99);
var kayit3 = sinif.ogrenciler.First(x => x.Id == 99);
Burada FirstOrDefault() metodumuzu kullanarak, "id" 'si 1 olan ilk kayıdın döndürülmesini istedik ve değişkenimize atadık. Kayıt var olduğundan "kayit" değişkenimize değeri atanacaktır.
2. örnekte "id" 'si 99 olan ilk kayıdın döndürülmesini istedik. Böyle bir kayıt olmadığı için "kayit2" değişkenimize NULL atanır.
First() metodu ile aralarındaki farkı anlamak için 3. örnekte "id" 'si 99 olan ilk kayıdın bu sefer First() kullanılarak "kayit3" değişkenimize atanmasını istedik. Böyle bir kayıt olmadığı için NULL yerine hata verdiğini gördük.
Tüm kod aşağıdaki gibi olacaktır.
namespace ConsoleApplicationTest
{
class Program
{
static void Main(string[] args) {
Sinif sinif = new Sinif();
var kayit = sinif.ogrenciler.FirstOrDefault(x => x.Id == 1);
var kayit2 = sinif.ogrenciler.FirstOrDefault(x => x.Id == 99);
var kayit3 = sinif.ogrenciler.First(x => x.Id == 99);
}
}
class Ogrenci
{
public int Id { get; set; }
public string Ad { get; set; }
}
class Sinif
{
public readonly List ogrenciler;
public Sinif()
{
this.ogrenciler = OgrenciYarat().ToList();
}
private IEnumerable OgrenciYarat()
{
yield return new Ogrenci { Id = 1, Ad = "Ali" };
yield return new Ogrenci { Id = 2, Ad = "Erdem" };
yield return new Ogrenci { Id = 3, Ad = "Ayşe" };
yield return new Ogrenci { Id = 4, Ad = "Lale" };
yield return new Ogrenci { Id = 5, Ad = "Gül" };
yield return new Ogrenci { Id = 6, Ad = "Osman" };
yield return new Ogrenci { Id = 7, Ad = "Irmak" };
yield return new Ogrenci { Id = 8, Ad = "Tarık" };
}
}
}