﻿
{"id":634,"date":"2012-05-22T11:03:00","date_gmt":"2012-05-22T11:03:00","guid":{"rendered":"http:\/\/www.gencayyildiz.com\/blog\/?p=634"},"modified":"2012-05-22T11:03:00","modified_gmt":"2012-05-22T11:03:00","slug":"lambda-ifadeleri-lambda-expressions","status":"publish","type":"post","link":"https:\/\/www.gencayyildiz.com\/blog\/lambda-ifadeleri-lambda-expressions\/","title":{"rendered":"Lambda \u0130fadeleri (Lambda Expressions)"},"content":{"rendered":"<div id=\"fb-root\"><\/div>\n<p>Lambda ifadeleri anonim bir fonksiyon olarak isimlendirilebilir.Dikkatinizi \u00e7ekerim ki, metod de\u011fil de fonksiyon olarak tan\u0131ml\u0131yorum.Temelde belli bir giri\u015f de\u011ferine, sonu\u00e7 \u00fcreten bir fonksiyon tipidir.<br \/>\nLambda ifadelerini kullan\u0131rken <span style=\"color: #ff9900;\">=&gt;<\/span>(Lambda Operat\u00f6r\u00fc) ifadesini kullan\u0131r\u0131z.<br \/>\nBu ifadenin sol taraf\u0131nda fonksiyonda kullan\u0131lacak bir de\u011fi\u015fken tan\u0131mlan\u0131rken, sa\u011f taraf\u0131nda ise o de\u011fi\u015fken de\u011ferinde sonu\u00e7 \u00fcretek ifadeler yer al\u0131r.K\u0131sada solundaki ifade, sa\u011f\u0131ndaki ifadeye parametre olarak ge\u00e7irilir.<br \/>\n<!--more--><br \/>\n\u00d6rnek olarak;<\/p>\n<ul>\n<li>x =&gt; x+2<\/li>\n<li>Y =&gt; (Y*2)\/9<\/li>\n<li>Ahmet =&gt; Ahmet &gt; 0 \u00a0 \/\/Sonu\u00e7 olarak true ya da false \u00fcretir.<\/li>\n<\/ul>\n<p>Hi\u00e7 uzatmadan Lambda ifadelerini nerde nas\u0131l kullanaca\u011f\u0131z inceleyelim.<br \/>\n\u0130ncelememizi \u00f6rnek bir int tipinden dizi de\u011fi\u015fkenimiz \u00fczerinde yapaca\u011f\u0131z.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\nint&#x5B;] Sayilar = new int&#x5B;] { 1, 3, 5, 7, 8, 89, 65, 453, 43423, 3232423 };\r\n<\/pre>\n<p>Bu dizide 5 ten b\u00fcy\u00fck olan say\u0131lar\u0131 Lambda ifadesi kullanmadan siz bildi\u011finiz yollarla yapabilirsiniz.Ancak Lambda kullanarak nas\u0131l yapaca\u011f\u0131z onu g\u00f6stereyim.<br \/>\n<a href=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2012\/05\/Lambda.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-635\" title=\"Lambda\" src=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2012\/05\/Lambda.jpg\" alt=\"\" width=\"597\" height=\"107\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2012\/05\/Lambda.jpg 597w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2012\/05\/Lambda-300x53.jpg 300w\" sizes=\"auto, (max-width: 597px) 100vw, 597px\" \/><\/a>Yukar\u0131daki resmi incelerseniz, extension olan Where metodunu kullanaca\u011f\u0131z.Ancak burdan her extension metodda demek ki Lambda kullan\u0131yormu\u015f sonucunu \u00e7\u0131karmay\u0131n.Metodun parametresinde g\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi ,&#8221;Func&lt;int,bool&gt; predicate&#8221; gibi bir ifade varsa e\u011fer o metodda Lambda ifadesi kullan\u0131labilir demektir.Baz\u0131 metodlarda &#8220;predicate&#8221; yerine &#8220;selector&#8221; yazabilir.Fark etmez.<\/p>\n<p>Lambda ifadesinin kullan\u0131m \u015fart\u0131 metoduna g\u00f6re de\u011fi\u015fmektedir.Where metodunda Lambda kullan\u0131m tarz\u0131na bakarsak e\u011fer, &#8220;Func&lt;int,bool&gt;&#8221; demektedir.Yani \u015funu s\u00f6yl\u00fcyor.Lambda operat\u00f6r\u00fcn\u00fcn &#8220;=&gt;&#8221; sol taraf\u0131nda int bir de\u011fer olacak, fonksiyonun sa\u011f\u0131nda ise geriye bool d\u00f6nebilecek bir ifade k\u00fcmesi olacak diyor.A\u015fa\u011f\u0131daki kod blo\u011funu incelerseniz Where metoduna uygun Lambda ifadesini nas\u0131l yazd\u0131\u011f\u0131m\u0131 anlayacaks\u0131n\u0131z.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n            int&#x5B;] Sayilar = new int&#x5B;] { 1, 3, 5, 7, 8, 89, 65, 453, 43423, 3232423 };\r\n            IEnumerable SayilarKumesi = Sayilar.Where(Sayi =&gt; Sayi &gt; 5);\r\n<\/pre>\n<p>Yukar\u0131da g\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi, Where metodu i\u00e7ine Lambda parametresini yazd\u0131m.Bizden operat\u00f6r\u00fcn solunda int , sa\u011f\u0131nda geriye bool tipten geri d\u00f6nen bir ifade istiyordu.Dikkat ederseniz, operat\u00f6r\u00fcn soluna Sayi ad\u0131nda bir de\u011fi\u015fken tan\u0131mlad\u0131m.Sa\u011f\u0131nda ise bool tipten geri d\u00f6necek bir \u015fart.Sa\u011f taraf tamamda sol taraftaki Sayi de\u011fi\u015fkeninin int olmas\u0131 gerekmiyor muydu? diyorsunuz.\u015eu anda int tipinden Sayilar dizi de\u011fi\u015fkeni \u00fczerinde \u00e7al\u0131\u015ft\u0131\u011f\u0131m\u0131z i\u00e7in Sayi de\u011fi\u015fkeni otomatik olarak int tipten alg\u0131lan\u0131yor.<\/p>\n<p>E\u011fer biz int tipinde bir dizide de\u011filde string tipindeki bir dizide \u00e7al\u0131\u015fsayd\u0131k bak\u0131n ne olurdu.<br \/>\n<a href=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2012\/05\/Lambda1.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-636\" title=\"Lambda\" src=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2012\/05\/Lambda1.jpg\" alt=\"\" width=\"631\" height=\"101\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2012\/05\/Lambda1.jpg 631w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2012\/05\/Lambda1-300x48.jpg 300w\" sizes=\"auto, (max-width: 631px) 100vw, 631px\" \/><\/a>G\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi hangi tip dizi de\u011fi\u015fkenin \u00fczerinde \u00e7al\u0131\u015f\u0131yorsak, o tipe g\u00f6re Lambda ifadesi istem yap\u0131yor.Bu bir tek Where metodu i\u00e7in ge\u00e7erli de\u011fil.Lambda kullanan di\u011fer metodlar i\u00e7inde ge\u00e7erlidir.\u00dcstelik sadece dizilerde Lambda ifadeleri kullan\u0131ld\u0131\u011f\u0131n\u0131 sanmay\u0131n\u0131z.Koleksiyonlarda da kullan\u0131lmaktad\u0131r.<\/p>\n<p>Lambda ifadelerini bir ba\u015fka kullan\u0131m tarz\u0131da,<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n            int&#x5B;] Sayilar = new int&#x5B;] { 1, 3, 5, 7, 8, 89, 65, 453, 43423, 3232423 };\r\n            Func&lt;int, bool&gt; OzelFonksiyonum = xx =&gt; xx &gt; 5;\r\n            Sayilar.Where(OzelFonksiyonum);\r\n<\/pre>\n<p>\u015eimdi bir ka\u00e7 \u00f6rnek ile yaz\u0131m\u0131 bitirelim.<br \/>\nBu \u00f6rneklerimde de,\u00f6nceki yaz\u0131lar\u0131mda kulland\u0131\u011f\u0131m Northwind.dbml yi aynen kullanmaktay\u0131m.<br \/>\nBeverages kategorisindek\u015fi \u00fcr\u00fcnlerden elde edilen toplam gelir ?<a href=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2012\/05\/Lamasdabda.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-641\" title=\"Lamasdabda\" src=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2012\/05\/Lamasdabda.jpg\" alt=\"\" width=\"794\" height=\"212\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2012\/05\/Lamasdabda.jpg 794w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2012\/05\/Lamasdabda-300x80.jpg 300w\" sizes=\"auto, (max-width: 794px) 100vw, 794px\" \/><\/a>Yukar\u0131da Lambda ifadesiyle toplam geliri al\u0131rken, Lambda ifadesinin benden istedi\u011fine bak\u0131n.Solda Satis_Detay tipinden,sa\u011fda geriye decimal tipinden d\u00f6nen ifade.Solda Satis_Detay tipini istemesinin sebebi, o anda Satis_Detaylari tipinden koleksiyonunda \u00e7al\u0131\u015f\u0131yor olmam\u0131zdand\u0131r.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\nNorthwindDataContext Northwind = new NorthwindDataContext();\r\nvar Sonuc = from urun in Northwind.Urunlers\r\nwhere urun.Kategoriler.KategoriAdi == &quot;Beverages&quot;\r\nselect new\r\n{\r\nUrunAdi = urun.UrunAdi,\r\nSatilanToplamUrunSayisi = urun.Satis_Detaylaris.Count,\r\nToplamGelir = urun.Satis_Detaylaris.Sum(Satis =&gt; Satis.Miktar * Satis.BirimFiyati)\r\n};\r\nforeach (var item in Sonuc)\r\n{\r\nlistBox1.Items.Add(item.UrunAdi + &quot; &quot; + item.SatilanToplamUrunSayisi + &quot; &quot; + item.ToplamGelir);\r\n}\r\n<\/pre>\n<p>7 nolu \u00fcr\u00fcnden ka\u00e7 adet sat\u0131lm\u0131\u015ft\u0131r?<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n            NorthwindDataContext Northwind = new NorthwindDataContext();\r\n            var Sonuc = (from urun in Northwind.Urunlers\r\n                         select urun).Count(Urun =&gt; Urun.UrunID == 7);\r\n\r\n            \/\/Yukar\u0131daki ile ayn\u0131 sonucu verir.\r\n\r\n            var Sonuc2 = (from urun in Northwind.Urunlers\r\n                         where urun.UrunID == 7\r\n                          select urun).Count() ;\r\n<\/pre>\n<p>10530 nolu sat\u0131\u015f\u0131 getirelim.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n            NorthwindDataContext Northwind = new NorthwindDataContext();\r\n            var Sonuc = from satis in Northwind.Satislars\r\n                        where satis.SatisID == 10530\r\n                        select satis;\r\n\r\n            foreach (var item in Sonuc)\r\n            {\r\n                listBox1.Items.Add(item.SevkAdi);\r\n            }\r\n<\/pre>\n<p>Satislar tablosunda 10530 nolu tek bir satis oldu\u011funa %100 eminim.Yani bir tane sonu\u00e7 gelece\u011fini biliyorum.Tamam sonu\u00e7ta 10530 nolu satis tek geldi\u011fini bilsemde, var tipinden Sonuc adl\u0131 bir koleksiyona at\u0131l\u0131yor.Ama \u015funu biliyorum ki o koleksiyondan sadece tek bir kay\u0131t \u00e7ekecem.<\/p>\n<p>E\u011fer koleksiyondan tek bir kay\u0131t \u00e7ekecekseniz Single kullanabilirsiniz.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n            NorthwindDataContext Northwind = new NorthwindDataContext();\r\n            var Sonuc = Northwind.Satislars.Single(Satis =&gt; Satis.SatisID == 10530);\r\n            listBox1.Items.Add(Sonuc.SevkAdi);\r\n<\/pre>\n<p><em><strong>NOT!!! Olmayan bir kayd\u0131 Single ile \u00e7a\u011f\u0131rmaya \u00e7al\u0131\u015f\u0131rsak hata al\u0131r\u0131z.<\/strong><\/em><br \/>\nPersonel ID si 4 olan personelin ilk sat\u0131\u015f\u0131n\u0131 \u00e7ekelim.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n            NorthwindDataContext Northwind = new NorthwindDataContext();\r\n            var Sonuc = Northwind.Satislars.First(Satis =&gt; Satis.PersonelID == 4);\r\n            listBox1.Items.Add(Sonuc.SatisID);\r\n<\/pre>\n<p>First() metodu ile koleksiyondaki ilk eleman\u0131 \u00e7eker.<\/p>\n<p>Personel ID si 4 olan t\u00fcm sat\u0131\u015flar\u0131 getirelim.Sonra da sevk adlar\u0131na g\u00f6re artan bir \u015fekilde s\u0131ralayal\u0131m.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n            NorthwindDataContext Northwind = new NorthwindDataContext();\r\n            var Sonuc = Northwind.Satislars.Where(Satis =&gt; Satis.PersonelID == 4).OrderBy(Satis=&gt; Satis.SevkAdi);\r\n            foreach (var item in Sonuc)\r\n            {\r\n                listBox1.Items.Add(item.SevkAdi);\r\n            }\r\n<\/pre>\n<p>Satislar\u0131 \u00e7ekelim, ilk 5 kayd\u0131 sonu\u00e7 k\u00fcmesinden \u00e7\u0131kar\u0131p geri kalan\u0131n\u0131 getirtelim.(6. ba\u015flar)<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n            NorthwindDataContext Northwind = new NorthwindDataContext();\r\n            var Sonuc = Northwind.Satislars.Skip(5);\r\n            foreach (var item in Sonuc)\r\n            {\r\n                listBox1.Items.Add(item.SatisID);\r\n            }\r\n<\/pre>\n<p>&lt;hr&gt;<br \/>\nToLookup() Metodu:Belirtilen kolon ismini key olarak d\u00fc\u015f\u00fcn\u00fc\u011f, nesneyi de value olarak saklayan bir key &#8211; value koleksiyonu geriye d\u00f6ner.A\u015fa\u011f\u0131daki \u00f6rnekte Satislar nesnesinin SevkAdi kolonu key olarak Satislar nesneside value olarak saklanacakt\u0131r.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n            NorthwindDataContext Northwind = new NorthwindDataContext();\r\n            var Sonuc = Northwind.Satislars.ToLookup(Satis =&gt; Satis.SevkAdi);\r\n            Satislar s = Sonuc&#x5B;&quot;Ernst Handel&quot;].First();\r\n            listBox1.Items.Add(s.SevkAdi + &quot; &quot; + s.SatisID);\r\n<\/pre>\n<p>Lambda ifadeleri hakk\u0131nda anlatacaklar\u0131m bu kadar.<br \/>\nUmar\u0131m faydas\u0131n\u0131 g\u00f6r\u00fcrs\u00fcn\u00fcz.<br \/>\nSonraki yaz\u0131lar\u0131mda g\u00f6r\u00fc\u015fmek \u00fczere..<br \/>\n\u0130yi \u00c7al\u0131\u015fmalar \ud83d\ude42<\/p>\n<!-- AddThis Advanced Settings generic via filter on the_content --><!-- AddThis Share Buttons generic via filter on the_content -->","protected":false},"excerpt":{"rendered":"<p>Lambda ifadeleri anonim bir fonksiyon olarak isimlendirilebilir.Dikkatinizi \u00e7ekerim ki, metod de\u011fil de fonksiyon olarak tan\u0131ml\u0131yorum.Temelde belli bir giri\u015f de\u011ferine, sonu\u00e7 \u00fcreten bir fonksiyon tipidir. Lambda ifadelerini kullan\u0131rken =&gt;(Lambda Operat\u00f6r\u00fc) ifadesini kullan\u0131r\u0131z. Bu ifadenin sol&#46;&#46;&#46;<!-- AddThis Advanced Settings generic via filter on get_the_excerpt --><!-- AddThis Share Buttons generic via filter on get_the_excerpt --><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[10,12,226],"tags":[230,231],"class_list":["post-634","post","type-post","status-publish","format-standard","hentry","category-asp-net","category-c-sharp-c","category-linq","tag-lambda","tag-lambda-expressions"],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/634","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/comments?post=634"}],"version-history":[{"count":0,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/634\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media?parent=634"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/categories?post=634"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/tags?post=634"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}