{"id":39049,"date":"2026-02-13T12:00:40","date_gmt":"2026-02-13T09:00:40","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/firstordefault-ve-singleordefault-cta-kapsamli-ve-pratik-kilavuz\/"},"modified":"2026-02-13T12:00:40","modified_gmt":"2026-02-13T09:00:40","slug":"firstordefault-ve-singleordefault-cta-kapsamli-ve-pratik-kilavuz","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/firstordefault-ve-singleordefault-cta-kapsamli-ve-pratik-kilavuz\/","title":{"rendered":"FirstOrDefault ve SingleOrDefault: C#&#8217;ta Kapsaml\u0131 ve Pratik K\u0131lavuz"},"content":{"rendered":"<h2>FirstOrDefault ve SingleOrDefault: C#&#8217;ta Kapsaml\u0131 ve Pratik K\u0131lavuz<\/h2>\n<p>C# geli\u015ftiricileri olarak, koleksiyonlar ve veri yap\u0131lar\u0131 \u00fczerinde i\u015flem yaparken belirli kriterlere uyan tek bir \u00f6\u011feyi se\u00e7me ihtiyac\u0131yla s\u0131k\u00e7a kar\u015f\u0131la\u015f\u0131r\u0131z. .NET&#8217;in g\u00fc\u00e7l\u00fc LINQ (Language Integrated Query) yetenekleri sayesinde bu t\u00fcr i\u015flemler olduk\u00e7a kolayla\u015f\u0131r. Ancak LINQ&#8217;in sundu\u011fu <code>FirstOrDefault<\/code> ve <code>SingleOrDefault<\/code> metotlar\u0131 aras\u0131ndaki farklar\u0131 tam olarak anlamak, hem kodunuzun do\u011frulu\u011funu hem de performans\u0131n\u0131 do\u011frudan etkileyebilir. Bu makale, bu iki \u00f6nemli metodu derinlemesine inceleyerek ne zaman hangisini kullanman\u0131z gerekti\u011fi konusunda size kapsaml\u0131 bir rehber sunacakt\u0131r.<\/p>\n<h3>LINQ ve Sorgulama Temelleri<\/h3>\n<p>LINQ, C# diline entegre edilmi\u015f bir sorgulama dilidir. Geli\u015ftiricilerin farkl\u0131 veri kaynaklar\u0131ndan (nesneler, veritabanlar\u0131, XML, vb.) veri sorgulamas\u0131na ve manip\u00fcle etmesine olanak tan\u0131r. Koleksiyonlar \u00fczerinde \u00e7al\u0131\u015f\u0131rken, belirli ko\u015fullar\u0131 sa\u011flayan \u00f6\u011feleri filtrelemek, s\u0131ralamak veya d\u00f6n\u00fc\u015ft\u00fcrmek i\u00e7in LINQ b\u00fcy\u00fck kolayl\u0131k sa\u011flar.<\/p>\n<h4>LINQ&#8217;e K\u0131sa Bir Bak\u0131\u015f<\/h4>\n<p>LINQ, .NET Framework 3.5 ile tan\u0131t\u0131lan ve C# diline g\u00fc\u00e7l\u00fc bir sorgulama yetene\u011fi kazand\u0131ran bir teknolojidir. Temel amac\u0131, veri eri\u015fimini ve manip\u00fclasyonunu daha tutarl\u0131 ve okunabilir bir hale getirmektir. \u0130ster bir <code>List<T><\/code> \u00fczerinde \u00e7al\u0131\u015f\u0131n, ister bir veritaban\u0131ndan veri \u00e7ekin, LINQ ayn\u0131 s\u00f6zdizimi ve mant\u0131kla \u00e7al\u0131\u015fman\u0131za olanak tan\u0131r.<\/p>\n<h4>Koleksiyonlarda Veri Filtreleme<\/h4>\n<p>LINQ&#8217;in en yayg\u0131n kullan\u0131m alanlar\u0131ndan biri, bir koleksiyondaki \u00f6\u011feleri belirli kriterlere g\u00f6re filtrelemektir. \u00d6rne\u011fin, bir \u00fcr\u00fcn listesinden sadece stokta olanlar\u0131 veya belirli bir fiyattan y\u00fcksek olanlar\u0131 se\u00e7mek isteyebilirsiniz. Bu genellikle <code>Where<\/code> metodu ile yap\u0131l\u0131r.<\/p>\n<pre><code class=\"language-csharp\">\nList<int> sayilar = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };\nvar ciftSayilar = sayilar.Where(s => s % 2 == 0); \/\/ { 2, 4, 6, 8, 10 }\n<\/pre>\n<p><\/code><\/p>\n<h4>Tekil Eleman Se\u00e7imi \u0130htiyac\u0131<\/h4>\n<p>Filtreleme sonucunda birden fazla \u00f6\u011fe elde edebiliriz, ancak \u00e7o\u011fu zaman belirli bir ko\u015fulu sa\u011flayan tek bir \u00f6\u011feye ihtiyac\u0131m\u0131z olur. \u00d6rne\u011fin, belirli bir ID'ye sahip kullan\u0131c\u0131y\u0131 bulmak veya bir listedeki ilk e\u015fle\u015fen \u00f6\u011feyi almak. \u0130\u015fte bu noktada <code>FirstOrDefault<\/code> ve <code>SingleOrDefault<\/code> gibi metotlar devreye girer. Bu metotlar, bir koleksiyondan tek bir \u00f6\u011feyi d\u00f6nd\u00fcrmek i\u00e7in tasarlanm\u0131\u015ft\u0131r, ancak farkl\u0131 senaryolara ve beklentilere g\u00f6re farkl\u0131 davran\u0131\u015flar sergilerler.<\/p>\n<h3>FirstOrDefault Nedir ve Ne Zaman Kullan\u0131l\u0131r?<\/h3>\n<p><code>FirstOrDefault<\/code> metodu, bir koleksiyonda belirli bir ko\u015fula uyan ilk \u00f6\u011feyi d\u00f6nd\u00fcrmek i\u00e7in kullan\u0131l\u0131r. E\u011fer ko\u015fula uyan hi\u00e7bir \u00f6\u011fe bulunamazsa, t\u00fcr\u00fcn varsay\u0131lan de\u011ferini (\u00f6rne\u011fin, referans t\u00fcrleri i\u00e7in <code>null<\/code>, int i\u00e7in <code>0<\/code>, bool i\u00e7in <code>false<\/code>) d\u00f6nd\u00fcr\u00fcr. Bu, uygulaman\u0131z\u0131n beklenmedik hatalar yerine g\u00fcvenli bir varsay\u0131lan de\u011ferle devam etmesini sa\u011flar.<\/p>\n<h4>Tan\u0131m\u0131 ve \u00c7al\u0131\u015fma Prensibi<\/h4>\n<p><code>FirstOrDefault<\/code>, ad\u0131ndan da anla\u015f\u0131laca\u011f\u0131 gibi, \"ilk veya varsay\u0131lan\" anlam\u0131na gelir. Bir koleksiyon \u00fczerinde bir filtreleme ko\u015fulu uygulad\u0131\u011f\u0131n\u0131zda, bu ko\u015fulu sa\u011flayan ilk \u00f6\u011feyi bulur ve d\u00f6nd\u00fcr\u00fcr. E\u011fer hi\u00e7bir \u00f6\u011fe ko\u015fulu sa\u011flamazsa, d\u00f6nd\u00fcr\u00fclecek bir \u00f6\u011fe olmad\u0131\u011f\u0131 i\u00e7in ilgili t\u00fcr\u00fcn varsay\u0131lan de\u011ferini d\u00f6nd\u00fcr\u00fcr. Bu metot, genellikle bir koleksiyonda bir \u00f6\u011fenin var olup olmad\u0131\u011f\u0131n\u0131 kontrol etmek ve varsa ilkini almak istedi\u011finizde tercih edilir.<\/p>\n<h4>Varsay\u0131lan De\u011fer Davran\u0131\u015f\u0131<\/h4>\n<p>Bu metodun en \u00f6nemli \u00f6zelliklerinden biri, hi\u00e7bir \u00f6\u011fe bulunamad\u0131\u011f\u0131nda bir istisna f\u0131rlatmak yerine t\u00fcr\u00fcn varsay\u0131lan de\u011ferini d\u00f6nd\u00fcrmesidir. Bu, \u00f6zellikle veri taban\u0131ndan veya API'den gelen verilerin her zaman beklendi\u011fi gibi olmayabilece\u011fi senaryolarda hata y\u00f6netimini basitle\u015ftirir. D\u00f6nd\u00fcr\u00fclen de\u011ferin <code>null<\/code> olup olmad\u0131\u011f\u0131n\u0131 kontrol ederek \u00f6\u011fenin bulunup bulunmad\u0131\u011f\u0131n\u0131 anlayabilirsiniz.<\/p>\n<pre><code class=\"language-csharp\">\npublic class Urun\n{\n    public int Id { get; set; }\n    public string Ad { get; set; }\n    public decimal Fiyat { get; set; }\n}\n\nList<Urun> urunler = new List<Urun>\n{\n    new Urun { Id = 1, Ad = \"Klavye\", Fiyat = 150.00M },\n    new Urun { Id = 2, Ad = \"Fare\", Fiyat = 80.00M },\n    new Urun { Id = 3, Ad = \"Monit\u00f6r\", Fiyat = 1200.00M }\n};\n\n\/\/ ID'si 2 olan \u00fcr\u00fcn\u00fc bul\nUrun fare = urunler.FirstOrDefault(u => u.Id == 2);\n\/\/ fare.Ad: \"Fare\"\n\n\/\/ ID'si 5 olan \u00fcr\u00fcn\u00fc bul (yok)\nUrun olmayanUrun = urunler.FirstOrDefault(u => u.Id == 5);\n\/\/ olmayanUrun: null (Urun referans t\u00fcr\u00fc oldu\u011fu i\u00e7in)\n\n\/\/ Bo\u015f bir listede FirstOrDefault\nList<int> bosListe = new List<int>();\nint varsayilanInt = bosListe.FirstOrDefault();\n\/\/ varsayilanInt: 0 (int de\u011fer t\u00fcr\u00fc oldu\u011fu i\u00e7in)\n<\/pre>\n<p><\/code><\/p>\n<h4>Kullan\u0131m Senaryolar\u0131 ve \u00d6rnekler<\/h4>\n<ul>\n<li>Bir listedeki belirli bir kritere uyan ilk \u00f6\u011feyi almak ve \u00f6\u011fe yoksa <code>null<\/code> ile devam etmek.<\/li>\n<li>Kullan\u0131c\u0131n\u0131n tercih etti\u011fi ayarlar\u0131 bulmak, yoksa varsay\u0131lan ayarlar\u0131 kullanmak.<\/li>\n<li>Bir arama sonucunda birden fazla e\u015fle\u015fme olsa bile sadece ilkini g\u00f6stermek.<\/li>\n<\/ul>\n<h3>SingleOrDefault Nedir ve Ne Zaman Kullan\u0131l\u0131r?<\/h3>\n<p><code>SingleOrDefault<\/code> metodu da <code>FirstOrDefault<\/code> gibi bir koleksiyonda belirli bir ko\u015fula uyan tek bir \u00f6\u011feyi d\u00f6nd\u00fcrmek i\u00e7in kullan\u0131l\u0131r. Ancak, <code>SingleOrDefault<\/code>'\u0131n temel fark\u0131, <strong>e\u011fer ko\u015fula uyan birden fazla \u00f6\u011fe bulunursa bir <code>InvalidOperationException<\/code> f\u0131rlatmas\u0131d\u0131r<\/strong>. Ko\u015fula uyan hi\u00e7bir \u00f6\u011fe bulunamazsa, <code>FirstOrDefault<\/code> gibi t\u00fcr\u00fcn varsay\u0131lan de\u011ferini d\u00f6nd\u00fcr\u00fcr.<\/p>\n<h4>Tan\u0131m\u0131 ve \u00c7al\u0131\u015fma Prensibi<\/h4>\n<p><code>SingleOrDefault<\/code>, \"tek veya varsay\u0131lan\" anlam\u0131na gelir. Bu metot, bir koleksiyonun belirli bir ko\u015fulu tam olarak bir kez sa\u011flad\u0131\u011f\u0131ndan emin olmak istedi\u011finizde kullan\u0131l\u0131r. Yani, bekledi\u011finiz \u015feyin tam olarak bir tane olmas\u0131 gerekti\u011fi durumlarda tercih edilir. E\u011fer koleksiyonda ko\u015fula uyan birden fazla \u00f6\u011fe varsa, bu durum bir hata olarak kabul edilir ve <code>InvalidOperationException<\/code> f\u0131rlat\u0131l\u0131r. Bu davran\u0131\u015f, verilerinizdeki tutars\u0131zl\u0131klar\u0131 erken a\u015famada tespit etmenize yard\u0131mc\u0131 olur.<\/p>\n<h4>Tekillik Kontrol\u00fc ve Varsay\u0131lan De\u011fer<\/h4>\n<p><code>SingleOrDefault<\/code>'\u0131n en belirgin \u00f6zelli\u011fi, tekillik kontrol\u00fcd\u00fcr. E\u011fer sorgunuz birden fazla sonu\u00e7 d\u00f6nd\u00fcr\u00fcyorsa, bu bir hata durumudur ve uygulama ak\u0131\u015f\u0131n\u0131 durdurur. Bu, \u00f6zellikle benzersiz olmas\u0131 gereken ID'ler veya anahtarlar \u00fczerinden arama yaparken kritik \u00f6neme sahiptir. Hi\u00e7bir \u00f6\u011fe bulunamazsa, <code>FirstOrDefault<\/code> gibi t\u00fcr\u00fcn varsay\u0131lan de\u011ferini d\u00f6nd\u00fcr\u00fcr, bu da <code>null<\/code> veya <code>0<\/code> gibi de\u011ferler olabilir.<\/p>\n<pre><code class=\"language-csharp\">\npublic class Kullanici\n{\n    public int Id { get; set; }\n    public string KullaniciAdi { get; set; }\n    public string Email { get; set; }\n}\n\nList<Kullanici> kullanicilar = new List<Kullanici>\n{\n    new Kullanici { Id = 1, KullaniciAdi = \"ali\", Email = \"ali@example.com\" },\n    new Kullanici { Id = 2, KullaniciAdi = \"veli\", Email = \"veli@example.com\" },\n    new Kullanici { Id = 3, KullaniciAdi = \"ayse\", Email = \"ayse@example.com\" }\n};\n\n\/\/ ID'si 2 olan kullan\u0131c\u0131y\u0131 bul\nKullanici veli = kullanicilar.SingleOrDefault(k => k.Id == 2);\n\/\/ veli.KullaniciAdi: \"veli\"\n\n\/\/ ID'si 5 olan kullan\u0131c\u0131y\u0131 bul (yok)\nKullanici olmayanKullanici = kullanicilar.SingleOrDefault(k => k.Id == 5);\n\/\/ olmayanKullanici: null\n\n\/\/ Birden fazla e\u015fle\u015fme durumu (HATA!)\nList<Kullanici> ayniIsimliKullanicilar = new List<Kullanici>\n{\n    new Kullanici { Id = 1, KullaniciAdi = \"deneme\", Email = \"d1@example.com\" },\n    new Kullanici { Id = 2, KullaniciAdi = \"deneme\", Email = \"d2@example.com\" }\n};\n\ntry\n{\n    Kullanici denemeKullanici = ayniIsimliKullanicilar.SingleOrDefault(k => k.KullaniciAdi == \"deneme\");\n    \/\/ Bu sat\u0131ra asla ula\u015f\u0131lamaz, \u00e7\u00fcnk\u00fc yukar\u0131daki \u00e7a\u011fr\u0131 InvalidOperationException f\u0131rlat\u0131r.\n}\ncatch (InvalidOperationException ex)\n{\n    Console.WriteLine(\"Hata: \" + ex.Message); \/\/ S\u0131ralamada birden fazla \u00f6\u011fe var.\n}\n<\/pre>\n<p><\/code><\/p>\n<h4>Kullan\u0131m Senaryolar\u0131 ve \u00d6rnekler<\/h4>\n<ul>\n<li>Veritaban\u0131ndan benzersiz bir anahtar (\u00f6rne\u011fin, birincil anahtar) kullanarak tek bir kay\u0131t \u00e7ekmek.<\/li>\n<li>Uygulama ayarlar\u0131n\u0131 bir listeden al\u0131rken, o ayar\u0131n sadece bir tane olmas\u0131 gerekti\u011fini garanti etmek.<\/li>\n<li>Bir kullan\u0131c\u0131 giri\u015fiyle e\u015fle\u015fen tam olarak bir kullan\u0131c\u0131 profili beklemek.<\/li>\n<\/ul>\n<h3>Temel Farklar ve Kar\u015f\u0131la\u015ft\u0131rmal\u0131 Analiz<\/h3>\n<p><code>FirstOrDefault<\/code> ve <code>SingleOrDefault<\/code> aras\u0131ndaki temel fark, koleksiyonda birden fazla e\u015fle\u015fen \u00f6\u011fe bulundu\u011funda ortaya \u00e7\u0131kan davran\u0131\u015ft\u0131r. Bu fark, uygulaman\u0131z\u0131n mant\u0131\u011f\u0131n\u0131 ve hata y\u00f6netimini derinden etkiler.<\/p>\n<h4>Birden Fazla Eleman Durumu<\/h4>\n<p>Bu, iki metodun en kritik ayr\u0131m noktas\u0131d\u0131r:<\/p>\n<ul>\n<li><strong>FirstOrDefault:<\/strong> Ko\u015fula uyan birden fazla \u00f6\u011fe bulunsa bile, sadece ilkini d\u00f6nd\u00fcr\u00fcr ve di\u011ferlerini g\u00f6z ard\u0131 eder. Herhangi bir istisna f\u0131rlatmaz.<\/li>\n<li><strong>SingleOrDefault:<\/strong> Ko\u015fula uyan birden fazla \u00f6\u011fe bulunursa, bir <code>InvalidOperationException<\/code> f\u0131rlat\u0131r. Bu, beklenen tekilli\u011fin ihlal edildi\u011fini g\u00f6sterir ve bir hata durumudur.<\/li>\n<\/ul>\n<h4>Eleman Bulunamama Durumu<\/h4>\n<p>Bu senaryoda her iki metot da benzer davran\u0131r:<\/p>\n<ul>\n<li><strong>FirstOrDefault:<\/strong> Ko\u015fula uyan hi\u00e7bir \u00f6\u011fe bulunamazsa, t\u00fcr\u00fcn varsay\u0131lan de\u011ferini d\u00f6nd\u00fcr\u00fcr (<code>null<\/code> veya <code>0<\/code>).<\/li>\n<li><strong>SingleOrDefault:<\/strong> Ko\u015fula uyan hi\u00e7bir \u00f6\u011fe bulunamazsa, t\u00fcr\u00fcn varsay\u0131lan de\u011ferini d\u00f6nd\u00fcr\u00fcr (<code>null<\/code> veya <code>0<\/code>).<\/li>\n<\/ul>\n<h4>Hata Y\u00f6netimi Yakla\u015f\u0131mlar\u0131<\/h4>\n<p>Hata y\u00f6netimi a\u00e7\u0131s\u0131ndan da farkl\u0131l\u0131klar vard\u0131r:<\/p>\n<ul>\n<li><strong>FirstOrDefault:<\/strong> Genellikle bir <code>null<\/code> kontrol\u00fc ile hata y\u00f6netimi yap\u0131l\u0131r. E\u011fer sonu\u00e7 <code>null<\/code> ise, \u00f6\u011fe bulunamam\u0131\u015ft\u0131r.<\/li>\n<li><strong>SingleOrDefault:<\/strong> Hem <code>null<\/code> kontrol\u00fc hem de <code>InvalidOperationException<\/code> yakalama (<code>try-catch<\/code> blo\u011fu) ile hata y\u00f6netimi gerektirir. <code>InvalidOperationException<\/code>, birden fazla \u00f6\u011fe bulundu\u011funda f\u0131rlat\u0131l\u0131rken, <code>null<\/code> de\u011feri hi\u00e7bir \u00f6\u011fe bulunamad\u0131\u011f\u0131nda d\u00f6nd\u00fcr\u00fcl\u00fcr.<\/li>\n<\/ul>\n<p>A\u015fa\u011f\u0131daki tablo, bu farklar\u0131 \u00f6zetlemektedir:<\/p>\n<table>\n<thead>\n<tr>\n<th>Durum<\/th>\n<th>FirstOrDefault Davran\u0131\u015f\u0131<\/th>\n<th>SingleOrDefault Davran\u0131\u015f\u0131<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><strong>Koleksiyon Bo\u015f<\/strong><\/td>\n<td>Varsay\u0131lan de\u011fer (\u00f6rn. <code>null<\/code>, <code>0<\/code>)<\/td>\n<td>Varsay\u0131lan de\u011fer (\u00f6rn. <code>null<\/code>, <code>0<\/code>)<\/td>\n<\/tr>\n<tr>\n<td><strong>Bir Eleman Var<\/strong><\/td>\n<td>O eleman\u0131 d\u00f6nd\u00fcr\u00fcr<\/td>\n<td>O eleman\u0131 d\u00f6nd\u00fcr\u00fcr<\/td>\n<\/tr>\n<tr>\n<td><strong>Birden Fazla Eleman Var<\/strong><\/td>\n<td>\u0130lk eleman\u0131 d\u00f6nd\u00fcr\u00fcr<\/td>\n<td><code>InvalidOperationException<\/code> f\u0131rlat\u0131r<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3>Performans ve Hata Y\u00f6netimi<\/h3>\n<p>Bu metotlar\u0131n se\u00e7imi sadece mant\u0131ksal do\u011frulukla ilgili de\u011fil, ayn\u0131 zamanda uygulaman\u0131z\u0131n performans\u0131 ve hata y\u00f6netim stratejileri \u00fczerinde de etkileri vard\u0131r.<\/p>\n<h4>Performans Etkileri<\/h4>\n<p>Genel olarak, <code>FirstOrDefault<\/code> ve <code>SingleOrDefault<\/code> aras\u0131ndaki performans farklar\u0131 \u00e7o\u011fu senaryoda ihmal edilebilir d\u00fczeydedir. Her ikisi de ko\u015fulu sa\u011flayan ilk \u00f6\u011feyi bulana kadar koleksiyonu tarar. Ancak, <code>SingleOrDefault<\/code>'\u0131n birden fazla \u00f6\u011fe durumunda ek bir kontrol yapmas\u0131 ve istisna f\u0131rlatmas\u0131, teorik olarak biraz daha fazla i\u015flem y\u00fck\u00fc getirebilir. B\u00fcy\u00fck koleksiyonlarda veya s\u0131k\u00e7a \u00e7a\u011fr\u0131lan metotlarda bu k\u00fc\u00e7\u00fck farklar birikebilir, ancak \u00e7o\u011fu i\u015f uygulamas\u0131 i\u00e7in bu birincil endi\u015fe kayna\u011f\u0131 de\u011fildir. As\u0131l performans fark\u0131, bu metotlar\u0131 veritaban\u0131 sorgular\u0131nda (\u00f6rne\u011fin Entity Framework ile) kulland\u0131\u011f\u0131n\u0131zda ortaya \u00e7\u0131kar. Veritaban\u0131 sa\u011flay\u0131c\u0131s\u0131, bu LINQ ifadelerini optimize edilmi\u015f SQL sorgular\u0131na \u00e7evirir ve genellikle benzer performans g\u00f6sterirler.<\/p>\n<h4>Hata Yakalama Stratejileri<\/h4>\n<p><code>SingleOrDefault<\/code> kullan\u0131rken, birden fazla e\u015fle\u015fme durumunda f\u0131rlat\u0131lan <code>InvalidOperationException<\/code>'\u0131 yakalamak i\u00e7in <code>try-catch<\/code> bloklar\u0131 kullanmak \u00f6nemlidir. Bu, uygulaman\u0131z\u0131n beklenmedik durumlarda \u00e7\u00f6kmesini \u00f6nler ve hatay\u0131 uygun \u015fekilde ele alman\u0131z\u0131 sa\u011flar.<\/p>\n<pre><code class=\"language-csharp\">\ntry\n{\n    Urun benzersizUrun = urunler.SingleOrDefault(u => u.Ad == \"Klavye\");\n    \/\/ E\u011fer \"Klavye\" ad\u0131nda birden fazla \u00fcr\u00fcn olsayd\u0131, buraya gelmeden exception f\u0131rlat\u0131l\u0131rd\u0131.\n    if (benzersizUrun != null)\n    {\n        Console.WriteLine($\"Bulunan \u00fcr\u00fcn: {benzersizUrun.Ad}\");\n    }\n    else\n    {\n        Console.WriteLine(\"\u00dcr\u00fcn bulunamad\u0131.\");\n    }\n}\ncatch (InvalidOperationException ex)\n{\n    Console.WriteLine(\"Hata: Birden fazla \u00fcr\u00fcn bulundu: \" + ex.Message);\n    \/\/ Loglama yapabilir veya kullan\u0131c\u0131ya bilgi verebilirsiniz.\n}\n<\/pre>\n<p><\/code><\/p>\n<h4>Bo\u015f Koleksiyonlarla Ba\u015fa \u00c7\u0131kma<\/h4>\n<p>Her iki metot da bo\u015f koleksiyonlar veya e\u015fle\u015fmeyen durumlar i\u00e7in varsay\u0131lan de\u011feri d\u00f6nd\u00fcrd\u00fc\u011f\u00fcnden, d\u00f6nd\u00fcr\u00fclen de\u011ferin <code>null<\/code> olup olmad\u0131\u011f\u0131n\u0131 kontrol etmek her zaman iyi bir uygulamad\u0131r. Bu, <code>NullReferenceException<\/code> gibi yayg\u0131n hatalar\u0131 \u00f6nler.<\/p>\n<pre><code class=\"language-csharp\">\nUrun arananUrun = urunler.FirstOrDefault(u => u.Id == 99);\nif (arananUrun != null)\n{\n    Console.WriteLine($\"\u00dcr\u00fcn ad\u0131: {arananUrun.Ad}\");\n}\nelse\n{\n    Console.WriteLine(\"Aranan \u00fcr\u00fcn bulunamad\u0131.\");\n}\n<\/pre>\n<p><\/code><\/p>\n<h3>Do\u011fru Se\u00e7imi Yapmak: Senaryo Bazl\u0131 Yakla\u015f\u0131mlar<\/h3>\n<p>Hangi metodu se\u00e7ece\u011finiz, i\u015f mant\u0131\u011f\u0131n\u0131z\u0131n ve veri beklentilerinizin ne oldu\u011funa ba\u011fl\u0131d\u0131r. Her iki metodun da belirli senaryolarda parlad\u0131\u011f\u0131 yerler vard\u0131r.<\/p>\n<h4>\"Herhangi Birini Al\" Durumlar\u0131<\/h4>\n<p>E\u011fer bir koleksiyonda belirli bir kritere uyan birden fazla \u00f6\u011fe olabilece\u011fini biliyor veya umursam\u0131yorsan\u0131z ve sadece ilkini almak sizin i\u00e7in yeterliyse, <code>FirstOrDefault<\/code> do\u011fru se\u00e7imdir. Bu, \"bana bu ko\u015fula uyan herhangi bir \u00f6\u011fe ver, yoksa hi\u00e7bir \u015fey verme\" anlam\u0131na gelir.<\/p>\n<ul>\n<li><strong>\u00d6rnek:<\/strong> Bir web sitesinde arama yapt\u0131\u011f\u0131n\u0131zda, sonu\u00e7lardan sadece ilkini \u00f6nizleme olarak g\u00f6stermek.<\/li>\n<li><strong>\u00d6rnek:<\/strong> Bir kullan\u0131c\u0131n\u0131n birden fazla e-posta adresi olabilir, ancak oturum a\u00e7ma i\u00e7in sadece birincil olan\u0131 kullanmak.<\/li>\n<\/ul>\n<h4>\"Tam Olarak Bir Tane Olmal\u0131\" Durumlar\u0131<\/h4>\n<p>E\u011fer i\u015f mant\u0131\u011f\u0131n\u0131z, belirli bir kritere uyan \u00f6\u011fenin koleksiyonda <strong>tam olarak bir tane<\/strong> olmas\u0131 gerekti\u011fini zorunlu k\u0131l\u0131yorsa, <code>SingleOrDefault<\/code> kullanmal\u0131s\u0131n\u0131z. Bu, \"bana bu ko\u015fula uyan tam olarak bir \u00f6\u011fe ver; e\u011fer hi\u00e7 yoksa veya birden fazla varsa, bu bir hata durumudur\" anlam\u0131na gelir.<\/p>\n<ul>\n<li><strong>\u00d6rnek:<\/strong> Bir veritaban\u0131nda benzersiz bir anahtar (ID, kullan\u0131c\u0131 ad\u0131, e-posta) ile bir kayd\u0131 sorgulamak. E\u011fer bu anahtarla birden fazla kay\u0131t bulunursa, bu bir veri tutars\u0131zl\u0131\u011f\u0131d\u0131r ve uygulaman\u0131n bunu bir hata olarak ele almas\u0131 gerekir.<\/li>\n<li><strong>\u00d6rnek:<\/strong> Bir konfig\u00fcrasyon dosyas\u0131ndan belirli bir ayar\u0131 okurken, o ayar\u0131n sadece bir kez tan\u0131mlanm\u0131\u015f olmas\u0131 gerekti\u011fini garanti etmek.<\/li>\n<\/ul>\n<h4>\u00d6rnek Senaryolar ve Karar A\u011fac\u0131<\/h4>\n<p>Karar verirken a\u015fa\u011f\u0131daki sorular\u0131 kendinize sorabilirsiniz:<\/p>\n<ol>\n<li><strong>Bu kritere uyan birden fazla \u00f6\u011fe olabilir mi?<\/strong>\n<ul>\n<li><strong>Evet:<\/strong> Sadece ilkini istiyorsan\u0131z <code>FirstOrDefault<\/code> kullan\u0131n.<\/li>\n<li><strong>Hay\u0131r (olmamal\u0131):<\/strong> <code>SingleOrDefault<\/code> kullan\u0131n. E\u011fer birden fazla bulunursa bir istisna f\u0131rlat\u0131lmas\u0131n\u0131 bekleyin.<\/li>\n<\/ul>\n<\/li>\n<li><strong>\u00d6\u011fe bulunamazsa ne yapmal\u0131y\u0131m?<\/strong>\n<ul>\n<li>Varsay\u0131lan bir de\u011ferle devam edebilirim (<code>null<\/code> kontrol\u00fc ile): Her ikisi de uygun.<\/li>\n<li>Bu bir hata durumu ve uygulaman\u0131n durmas\u0131 gerekiyor: <code>First()<\/code> veya <code>Single()<\/code> kullan\u0131n (<code>OrDefault<\/code> olmayan versiyonlar istisna f\u0131rlat\u0131r).<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n<h3>Yayg\u0131n Hatalar ve En \u0130yi Uygulamalar<\/h3>\n<p>Bu metotlar\u0131 kullan\u0131rken yap\u0131lan baz\u0131 yayg\u0131n hatalar vard\u0131r. Bunlardan ka\u00e7\u0131narak daha sa\u011flam ve hatas\u0131z kod yazabilirsiniz.<\/p>\n<h4>Yanl\u0131\u015f Varsay\u0131mlar<\/h4>\n<ul>\n<li><strong><code>SingleOrDefault<\/code>'\u0131 <code>FirstOrDefault<\/code> yerine kullanmak:<\/strong> Bir\u00e7ok geli\u015ftirici, \"ilk\" \u00f6\u011feyi almak istediklerinde yanl\u0131\u015fl\u0131kla <code>SingleOrDefault<\/code> kullan\u0131r. Ancak, koleksiyonda birden fazla \u00f6\u011fe varsa bu <code>InvalidOperationException<\/code>'a yol a\u00e7ar. E\u011fer birden fazla \u00f6\u011fe olmas\u0131 olas\u0131ysa ve sadece ilkini istiyorsan\u0131z, her zaman <code>FirstOrDefault<\/code> kullan\u0131n.<\/li>\n<li><strong><code>FirstOrDefault<\/code> sonucunu <code>null<\/code> kontrol\u00fc yapmadan kullanmak:<\/strong> <code>FirstOrDefault<\/code> bir \u00f6\u011fe bulamazsa <code>null<\/code> (referans t\u00fcrleri i\u00e7in) veya varsay\u0131lan de\u011feri d\u00f6nd\u00fcr\u00fcr. Bu de\u011feri do\u011frudan kullanmaya \u00e7al\u0131\u015fmak <code>NullReferenceException<\/code>'a neden olabilir. Her zaman <code>null<\/code> kontrol\u00fc yap\u0131n.<\/li>\n<\/ul>\n<h4>Hata Mesajlar\u0131n\u0131 Anlamak<\/h4>\n<p><code>InvalidOperationException<\/code> mesajlar\u0131 genellikle olduk\u00e7a a\u00e7\u0131klay\u0131c\u0131d\u0131r. \u00d6rne\u011fin, \"S\u0131ralamada birden fazla \u00f6\u011fe var\" veya \"S\u0131ralamada \u00f6\u011fe yok\" gibi mesajlar, sorunun kayna\u011f\u0131n\u0131 net bir \u015fekilde belirtir. Bu mesajlar\u0131 dikkatlice okumak, hatay\u0131 h\u0131zl\u0131ca gidermenize yard\u0131mc\u0131 olur.<\/p>\n<h4>G\u00fcvenli Kodlama Teknikleri<\/h4>\n<ul>\n<li><strong>Defansif Programlama:<\/strong> Her zaman verilerinizi bekledi\u011finiz gibi gelmeyebilece\u011fi varsay\u0131m\u0131yla kod yaz\u0131n. <code>FirstOrDefault<\/code>'tan sonra <code>null<\/code> kontrol\u00fc yapmak veya <code>SingleOrDefault<\/code>'\u0131 <code>try-catch<\/code> blo\u011fu i\u00e7inde kullanmak bu yakla\u015f\u0131ma \u00f6rnektir.<\/li>\n<li><strong>Niyetinizi A\u00e7\u0131k\u00e7a Belirtin:<\/strong> Kodunuzun ne yapmaya \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 a\u00e7\u0131k\u00e7a belirten metodu kullan\u0131n. E\u011fer sadece ilkini istiyorsan\u0131z <code>FirstOrDefault<\/code>, e\u011fer tek bir \u00f6\u011fe bekliyorsan\u0131z ve fazlas\u0131 bir hata ise <code>SingleOrDefault<\/code> kullan\u0131n. Bu, kodunuzu okuyan di\u011fer geli\u015ftiriciler i\u00e7in de anla\u015f\u0131l\u0131rl\u0131\u011f\u0131 art\u0131r\u0131r.<\/li>\n<\/ul>\n<pre><code class=\"language-csharp\">\n\/\/ K\u00f6t\u00fc \u00f6rnek: Birden fazla \u00fcr\u00fcn olabilece\u011fi halde SingleOrDefault kullanmak\n\/\/ Urun ilkUrun = urunler.SingleOrDefault(); \/\/ Hata f\u0131rlatabilir!\n\n\/\/ \u0130yi \u00f6rnek: Sadece ilk \u00fcr\u00fcn\u00fc almak istiyorsak\nUrun ilkUrun = urunler.FirstOrDefault();\nif (ilkUrun != null)\n{\n    Console.WriteLine($\"\u0130lk \u00fcr\u00fcn: {ilkUrun.Ad}\");\n}\n\n\/\/ K\u00f6t\u00fc \u00f6rnek: Benzersiz olmas\u0131 gereken bir ID i\u00e7in FirstOrDefault kullanmak\n\/\/ Urun kullanici = kullanicilar.FirstOrDefault(k => k.Id == id); \n\/\/ E\u011fer yanl\u0131\u015fl\u0131kla ayn\u0131 ID'ye sahip 2 kullan\u0131c\u0131 olu\u015fursa, bu kod bunu fark etmez.\n\n\/\/ \u0130yi \u00f6rnek: Benzersiz bir ID ile tek bir kullan\u0131c\u0131y\u0131 almak\ntry\n{\n    Kullanici kullanici = kullanicilar.SingleOrDefault(k => k.Id == id);\n    if (kullanici == null)\n    {\n        Console.WriteLine(\"Kullan\u0131c\u0131 bulunamad\u0131.\");\n    }\n    else\n    {\n        Console.WriteLine($\"Kullan\u0131c\u0131 ad\u0131: {kullanici.KullaniciAdi}\");\n    }\n}\ncatch (InvalidOperationException)\n{\n    Console.WriteLine(\"Hata: Veritaban\u0131nda ayn\u0131 ID'ye sahip birden fazla kullan\u0131c\u0131 var!\");\n}\n<\/pre>\n<p><\/code><\/p>\n<h3>Sonu\u00e7<\/h3>\n<p><code>FirstOrDefault<\/code> ve <code>SingleOrDefault<\/code> metotlar\u0131, C# ve LINQ'in temel ta\u015flar\u0131ndan ikisidir ve koleksiyonlardan tekil \u00f6\u011fe se\u00e7imi i\u00e7in g\u00fc\u00e7l\u00fc ara\u00e7lar sunar. Aralar\u0131ndaki temel fark, birden fazla e\u015fle\u015fen \u00f6\u011fe bulundu\u011funda ortaya \u00e7\u0131kan davran\u0131\u015ft\u0131r: <code>FirstOrDefault<\/code> ilkini d\u00f6nd\u00fcr\u00fcrken, <code>SingleOrDefault<\/code> bir istisna f\u0131rlat\u0131r. Hangi metodu se\u00e7ece\u011finiz, uygulaman\u0131z\u0131n i\u015f mant\u0131\u011f\u0131na ve veri beklentilerinize ba\u011fl\u0131d\u0131r. E\u011fer birden fazla \u00f6\u011fe olmas\u0131 kabul edilebilir bir durumsa ve sadece ilkini istiyorsan\u0131z <code>FirstOrDefault<\/code>'\u0131, e\u011fer tam olarak bir \u00f6\u011fe bekliyorsan\u0131z ve fazlas\u0131 bir hata durumuysa <code>SingleOrDefault<\/code>'\u0131 tercih etmelisiniz. Bu farklar\u0131 iyi anlamak, daha sa\u011flam, hatas\u0131z ve niyetinizi a\u00e7\u0131k\u00e7a ifade eden C# kodlar\u0131 yazman\u0131z\u0131 sa\u011flayacakt\u0131r.<\/p>\n<h3>SSS (S\u0131k Sorulan Sorular)<\/h3>\n<h4>FirstOrDefault() ve First() aras\u0131ndaki fark nedir?<\/h4>\n<p><code>FirstOrDefault()<\/code> bir \u00f6\u011fe bulamazsa t\u00fcr\u00fcn varsay\u0131lan de\u011ferini (\u00f6rn. <code>null<\/code>, <code>0<\/code>) d\u00f6nd\u00fcr\u00fcr. <code>First()<\/code> ise bir \u00f6\u011fe bulamazsa <code>InvalidOperationException<\/code> f\u0131rlat\u0131r. <code>First()<\/code> metodu, bir \u00f6\u011fenin kesinlikle bulunmas\u0131 gerekti\u011fi durumlarda kullan\u0131l\u0131r.<\/p>\n<h4>SingleOrDefault() ve Single() aras\u0131ndaki fark nedir?<\/h4>\n<p><code>SingleOrDefault()<\/code> bir \u00f6\u011fe bulamazsa t\u00fcr\u00fcn varsay\u0131lan de\u011ferini d\u00f6nd\u00fcr\u00fcr, birden fazla \u00f6\u011fe bulursa <code>InvalidOperationException<\/code> f\u0131rlat\u0131r. <code>Single()<\/code> ise hem bir \u00f6\u011fe bulamazsa hem de birden fazla \u00f6\u011fe bulursa <code>InvalidOperationException<\/code> f\u0131rlat\u0131r. <code>Single()<\/code> metodu, hem bir \u00f6\u011fenin kesinlikle bulunmas\u0131 gerekti\u011fi hem de tam olarak bir tane olmas\u0131 gerekti\u011fi durumlarda kullan\u0131l\u0131r.<\/p>\n<h4>Performans a\u00e7\u0131s\u0131ndan hangisi daha iyi?<\/h4>\n<p>\u00c7o\u011fu senaryoda, <code>FirstOrDefault<\/code> ve <code>SingleOrDefault<\/code> aras\u0131ndaki performans fark\u0131 ihmal edilebilir d\u00fczeydedir. Her ikisi de ilk e\u015fle\u015fmeyi bulana kadar koleksiyonu tarar. <code>SingleOrDefault<\/code>'\u0131n ek tekillik kontrol\u00fc, \u00e7ok b\u00fcy\u00fck koleksiyonlarda veya s\u0131k\u00e7a \u00e7a\u011fr\u0131lan metotlarda teorik olarak \u00e7ok k\u00fc\u00e7\u00fck bir ek y\u00fck getirebilir, ancak pratik uygulamalarda genellikle bu fark hissedilmez.<\/p>\n<h4><code>Where<\/code> ile birlikte nas\u0131l kullan\u0131l\u0131rlar?<\/h4>\n<p>Her iki metot da genellikle <code>Where()<\/code> metodu ile birlikte kullan\u0131l\u0131r. <code>Where()<\/code> bir filtreleme i\u015flemi yapar ve geriye <code>IEnumerable<T><\/code> d\u00f6nd\u00fcr\u00fcr. <code>FirstOrDefault()<\/code> veya <code>SingleOrDefault()<\/code> bu filtrelenmi\u015f koleksiyon \u00fczerinde \u00e7al\u0131\u015farak tek bir \u00f6\u011fe se\u00e7er.<\/p>\n<pre><code class=\"language-csharp\">\nvar aktifKullanici = kullanicilar.Where(k => k.AktifMi).FirstOrDefault();\nvar adminKullanici = kullanicilar.Where(k => k.Rol == \"Admin\").SingleOrDefault();\n<\/pre>\n<p><\/code><\/p>\n<h4>Veritaban\u0131 sorgular\u0131nda (ORM ile) davran\u0131\u015flar\u0131 farkl\u0131 m\u0131d\u0131r?<\/h4>\n<p>Evet, Entity Framework (veya benzeri ORM'ler) ile veritaban\u0131 sorgular\u0131nda kullan\u0131ld\u0131klar\u0131nda, bu LINQ metotlar\u0131 SQL sorgular\u0131na \u00e7evrilir. Davran\u0131\u015flar\u0131 bellekteki koleksiyonlarla benzerdir: <code>FirstOrDefault<\/code> genellikle <code>TOP 1<\/code> veya <code>LIMIT 1<\/code> i\u00e7eren bir SQL sorgusu olu\u015ftururken, <code>SingleOrDefault<\/code> hem <code>TOP 2<\/code> (birden fazla olup olmad\u0131\u011f\u0131n\u0131 kontrol etmek i\u00e7in) hem de tekillik kontrol\u00fc i\u00e7eren bir sorgu olu\u015fturabilir. Hata f\u0131rlatma mekanizmas\u0131 ise veritaban\u0131ndan d\u00f6nen sonu\u00e7lara g\u00f6re ORM taraf\u0131ndan tetiklenir. Bu senaryoda da i\u015f mant\u0131\u011f\u0131n\u0131za uygun olan\u0131 se\u00e7mek \u00f6nemlidir.<\/p>\n","protected":false},"excerpt":{"rendered":"LINQ, C# diline entegre edilmi\u015f bir sorgulama dilidir. Geli\u015ftiricilerin farkl\u0131 veri kaynaklar\u0131ndan (nesneler, veritabanlar\u0131, XML, vb.) veri sorgulamas\u0131&#8230;","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"csco_page_header_type":"","csco_page_load_nextpost":"","csco_page_subscribe_form":"","csco_page_contact_form":"","footnotes":""},"categories":[228],"tags":[],"class_list":{"0":"post-39049","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-c","7":"cs-entry","8":"cs-video-wrap"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.5 (Yoast SEO v25.3.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>FirstOrDefault ve SingleOrDefault: C#&#039;ta Kapsaml\u0131 ve Pratik K\u0131lavuz - Kodlar\u0131n Gizemli D\u00fcnyas\u0131<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fatihsoysal.com\/blog\/firstordefault-ve-singleordefault-cta-kapsamli-ve-pratik-kilavuz\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"FirstOrDefault ve SingleOrDefault: C#&#039;ta Kapsaml\u0131 ve Pratik K\u0131lavuz\" \/>\n<meta property=\"og:description\" content=\"LINQ, C# diline entegre edilmi\u015f bir sorgulama dilidir. Geli\u015ftiricilerin farkl\u0131 veri kaynaklar\u0131ndan (nesneler, veritabanlar\u0131, XML, vb.) veri sorgulamas\u0131...\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/firstordefault-ve-singleordefault-cta-kapsamli-ve-pratik-kilavuz\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2026-02-13T09:00:40+00:00\" \/>\n<meta name=\"author\" content=\"Fatih Soysal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Soysal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"15 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/firstordefault-ve-singleordefault-cta-kapsamli-ve-pratik-kilavuz\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/firstordefault-ve-singleordefault-cta-kapsamli-ve-pratik-kilavuz\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"FirstOrDefault ve SingleOrDefault: C#&#8217;ta Kapsaml\u0131 ve Pratik K\u0131lavuz\",\"datePublished\":\"2026-02-13T09:00:40+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/firstordefault-ve-singleordefault-cta-kapsamli-ve-pratik-kilavuz\/\"},\"wordCount\":2474,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"articleSection\":[\"C#\"],\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/firstordefault-ve-singleordefault-cta-kapsamli-ve-pratik-kilavuz\/#respond\"]}],\"copyrightYear\":\"2026\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/firstordefault-ve-singleordefault-cta-kapsamli-ve-pratik-kilavuz\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/firstordefault-ve-singleordefault-cta-kapsamli-ve-pratik-kilavuz\/\",\"name\":\"FirstOrDefault ve SingleOrDefault: C#'ta Kapsaml\u0131 ve Pratik K\u0131lavuz - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2026-02-13T09:00:40+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/firstordefault-ve-singleordefault-cta-kapsamli-ve-pratik-kilavuz\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/firstordefault-ve-singleordefault-cta-kapsamli-ve-pratik-kilavuz\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/firstordefault-ve-singleordefault-cta-kapsamli-ve-pratik-kilavuz\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"FirstOrDefault ve SingleOrDefault: C#&#8217;ta Kapsaml\u0131 ve Pratik K\u0131lavuz\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/\",\"name\":\"Fatihsoysal.com\",\"description\":\"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim\",\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\",\"name\":\"Fatih Soysal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"contentUrl\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"width\":512,\"height\":512,\"caption\":\"Fatih Soysal\"},\"logo\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\"},\"description\":\"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"FirstOrDefault ve SingleOrDefault: C#'ta Kapsaml\u0131 ve Pratik K\u0131lavuz - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fatihsoysal.com\/blog\/firstordefault-ve-singleordefault-cta-kapsamli-ve-pratik-kilavuz\/","og_locale":"tr_TR","og_type":"article","og_title":"FirstOrDefault ve SingleOrDefault: C#'ta Kapsaml\u0131 ve Pratik K\u0131lavuz","og_description":"LINQ, C# diline entegre edilmi\u015f bir sorgulama dilidir. Geli\u015ftiricilerin farkl\u0131 veri kaynaklar\u0131ndan (nesneler, veritabanlar\u0131, XML, vb.) veri sorgulamas\u0131...","og_url":"https:\/\/fatihsoysal.com\/blog\/firstordefault-ve-singleordefault-cta-kapsamli-ve-pratik-kilavuz\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2026-02-13T09:00:40+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"15 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/firstordefault-ve-singleordefault-cta-kapsamli-ve-pratik-kilavuz\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/firstordefault-ve-singleordefault-cta-kapsamli-ve-pratik-kilavuz\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"FirstOrDefault ve SingleOrDefault: C#&#8217;ta Kapsaml\u0131 ve Pratik K\u0131lavuz","datePublished":"2026-02-13T09:00:40+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/firstordefault-ve-singleordefault-cta-kapsamli-ve-pratik-kilavuz\/"},"wordCount":2474,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"articleSection":["C#"],"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/firstordefault-ve-singleordefault-cta-kapsamli-ve-pratik-kilavuz\/#respond"]}],"copyrightYear":"2026","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/firstordefault-ve-singleordefault-cta-kapsamli-ve-pratik-kilavuz\/","url":"https:\/\/fatihsoysal.com\/blog\/firstordefault-ve-singleordefault-cta-kapsamli-ve-pratik-kilavuz\/","name":"FirstOrDefault ve SingleOrDefault: C#'ta Kapsaml\u0131 ve Pratik K\u0131lavuz - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2026-02-13T09:00:40+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/firstordefault-ve-singleordefault-cta-kapsamli-ve-pratik-kilavuz\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/firstordefault-ve-singleordefault-cta-kapsamli-ve-pratik-kilavuz\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/firstordefault-ve-singleordefault-cta-kapsamli-ve-pratik-kilavuz\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"FirstOrDefault ve SingleOrDefault: C#&#8217;ta Kapsaml\u0131 ve Pratik K\u0131lavuz"}]},{"@type":"WebSite","@id":"https:\/\/fatihsoysal.com\/blog\/#website","url":"https:\/\/fatihsoysal.com\/blog\/","name":"Fatihsoysal.com","description":"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim","publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1","name":"Fatih Soysal","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","contentUrl":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","width":512,"height":512,"caption":"Fatih Soysal"},"logo":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/"},"description":"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.","url":"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/"}]}},"yoast_meta":{"yoast_wpseo_title":"","yoast_wpseo_metadesc":"","yoast_wpseo_canonical":""},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/39049","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/comments?post=39049"}],"version-history":[{"count":0,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/39049\/revisions"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=39049"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=39049"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=39049"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}