﻿
{"id":593,"date":"2012-05-20T17:00:26","date_gmt":"2012-05-20T17:00:26","guid":{"rendered":"http:\/\/www.gencayyildiz.com\/blog\/?p=593"},"modified":"2012-05-20T17:01:50","modified_gmt":"2012-05-20T17:01:50","slug":"linq-language-integrated-query","status":"publish","type":"post","link":"https:\/\/www.gencayyildiz.com\/blog\/linq-language-integrated-query\/","title":{"rendered":"LINQ (Language Integrated Query)"},"content":{"rendered":"<div id=\"fb-root\"><\/div>\n<p>LINQ (Language Integrated Query) yani &#8220;Dil ile B\u00fct\u00fcnle\u015fik Sorgu&#8221; anlam\u0131na gelen, .NET dillerinde veritaban\u0131 sorgulama i\u015flemini programatik k\u0131s\u0131mda ger\u00e7ekle\u015ftirebilmemizi sa\u011flayan, Microsoft .NET Framework bile\u015fenidir.<\/p>\n<p>Bu yaz\u0131 LINQ &#8216; ya giri\u015f niteli\u011fi ta\u015f\u0131maktad\u0131r.<br \/>\nLINQ TO OBJECTS konusuyla giri\u015f yap\u0131p , LINQ sorgular\u0131n\u0131n genel olarak nas\u0131l yap\u0131ld\u0131\u011f\u0131n\u0131 g\u00f6stermek istiyorum.<br \/>\n<!--more--> \u00d6ncelikle LINQ yap\u0131s\u0131n\u0131n nas\u0131l oldu\u011funu izah edeyim.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n            var GelenDegerleriTutacakDegisken = from BirNesne in NesnelerKoleksiyonuVeyaDizisi\r\n                                                where Varsa\u015eart\r\n                                                select SepeteAt(BirNesne);\r\n<\/pre>\n<p>LINQ sorgular\u0131nda geri d\u00f6nen sonu\u00e7lar\u0131 genellikle var tipinden de\u011fi\u015fkenlere at\u0131yoruz.Bunun sebebini LINQ yaz\u0131lar\u0131m\u0131 okuduk\u00e7a anlayacaks\u0131n\u0131z.<br \/>\n&#8220;in&#8221; anahtar s\u00f6zc\u00fc\u011f\u00fcnden sonra Koleksiyon veya Dizi verilir.\u0130\u015fte bu koleksiyon veya dizinin i\u00e7inde d\u00f6n\u00fcld\u00fc\u011f\u00fcnde, elde edilen her bir eleman &#8220;in&#8221; anahtar s\u00f6zc\u00fc\u011f\u00fcnden \u00f6nceki, ya da &#8220;from&#8221; anahtar s\u00f6zc\u00fc\u011f\u00fcnden hemen sonraki &#8220;BirNesne&#8221; diye adland\u0131r\u0131lan de\u011fi\u015fkende tutulur.Varsa \u015fart\u0131m\u0131z &#8220;where&#8221; anahtar s\u00f6zc\u00fc\u011f\u00fcnden sonra bu de\u011fi\u015fken \u00fczerinden yap\u0131l\u0131r.Ve en son &#8220;select&#8221; deyimiyle bu de\u011fi\u015fkenimiz &#8220;BirNesne&#8221; arka planda olu\u015futurulan bir koleksiyona at\u0131l\u0131p, var tipinden olan GelenDegerleriTutacakDegisken ad\u0131ndaki de\u011fi\u015fkene bu koleksiyon g\u00f6nderilir.<br \/>\n\u015eimdi \u00f6rneklerle peki\u015ftirelim.<br \/>\n\u00d6ncelikle Form ekran\u0131na birer ListBox ve Button nesneleri kolay\u0131m.<br \/>\n\u00d6rneklerde kullanmak amac\u0131yla, int tipinden bir dizi de\u011fi\u015fkeni olu\u015fturup i\u00e7ine bir ka\u00e7tane say\u0131 giriyorum.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n            int&#x5B;] Sayilar = new int&#x5B;]{3,5,12,24,88,112,181,223,234,509};\r\n<\/pre>\n<p>\u015eimdi LINQ kullanmadan 5 ten b\u00fcy\u00fck olan say\u0131lar\u0131 getirelim.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n        private void button1_Click(object sender, EventArgs e)\r\n        {\r\n            for (int i = 0; i &lt; Sayilar.Length; i++)\r\n            {\r\n                if (Sayilar&#x5B;i] &gt; 5)\r\n                {\r\n                    listBox1.Items.Add(Sayilar&#x5B;i]);\r\n                }\r\n            }\r\n        }\r\n<\/pre>\n<p>Button nesnesine t\u0131klad\u0131\u011f\u0131m\u0131zda ListBox nesnesinde 5 ten b\u00fcy\u00fck say\u0131lar\u0131n listelendi\u011fini g\u00f6rece\u011fiz.Ayn\u0131 i\u015flemi LINQ kullanarak yapal\u0131m.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n        private void button1_Click(object sender, EventArgs e)\r\n        {\r\n            var BestenBuyukSayilar = from Sayi in Sayilar\r\n                                     where Sayi &gt; 5\r\n                                     select Sayi;\r\n            foreach (var item in BestenBuyukSayilar)\r\n            {\r\n                listBox1.Items.Add(item);\r\n            }\r\n        }\r\n<\/pre>\n<p>Yukar\u0131daki kod blo\u011funu \u00e7al\u0131\u015ft\u0131r\u0131rsak e\u011fer, 5 ten b\u00fcy\u00fck say\u0131lar\u0131n ListBox nesnesinde listelendi\u011fini g\u00f6rece\u011fiz.<br \/>\nBen int tipinden bir dizi de\u011fi\u015fkende \u00e7al\u0131\u015ft\u0131\u011f\u0131m\u0131 biliyorum.Gelen LINQ sorgulamas\u0131nda , int tipindeki bir de\u011fi\u015fken \u00fczerinden \u00e7al\u0131\u015ft\u0131\u011f\u0131m halde gelen sonu\u00e7lar\u0131n var tipinden bir de\u011fi\u015fkene at\u0131lmas\u0131 benim i\u00e7in pek ehli bir durum olamaz.O y\u00fczden gelen sonu\u00e7lar\u0131 int tipinden bir diziye ya da koleksiyona atabilirim.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n        private void button1_Click(object sender, EventArgs e)\r\n        {\r\n            int&#x5B;] BestenBuyukSayilar = (from Sayi in Sayilar\r\n                                     where Sayi &gt; 5\r\n                                     select Sayi).ToArray&lt;int&gt;();\r\n            foreach (int item in BestenBuyukSayilar)\r\n            {\r\n                listBox1.Items.Add(item);\r\n            }\r\n        }\r\n<\/pre>\n<p>G\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi sonu\u00e7 k\u00fcmesini ,var tipinden de\u011filde int tipinden bir diziye att\u0131m.Tabi bunu yaparken, bir extension metod olan ToArray() metodunuda yazmam\u0131z gerekiyor.(Extension metodlar\u0131 ileri LINQ yaz\u0131lar\u0131mda anlataca\u011f\u0131m.)<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n        private void button1_Click(object sender, EventArgs e)\r\n        {\r\n            List&lt;int&gt; BestenBuyukSayilar = (from Sayi in Sayilar\r\n                                     where Sayi &gt; 5\r\n                                     select Sayi).ToList&lt;int&gt;();\r\n            foreach (int item in BestenBuyukSayilar)\r\n            {\r\n                listBox1.Items.Add(item);\r\n            }\r\n        }\r\n<\/pre>\n<p>Yukar\u0131daki \u00f6rnekte ise, sonu\u00e7 k\u00fcmesini int tipinden koleksiyona at\u0131yorum.<\/p>\n<hr \/>\n<p>\u015euana kadar foreach d\u00f6ng\u00fcs\u00fcnden gelen her eleman\u0131 var tipinde kar\u015f\u0131lad\u0131k.Bir ka\u00e7 yerde sonu\u00e7 k\u00fcmesini int dizi ya da koleksiyonuna \u00e7evirerek i\u015flem yapt\u0131\u011f\u0131m\u0131z i\u00e7in int tipinde elemanlar\u0131 kar\u015f\u0131lad\u0131\u011f\u0131m\u0131z oldu.Belirli bir tipin koleksiyonunda LINQ ile sorgulama yapt\u0131ktan sonra, biliyorsunuz ki sonu\u00e7 k\u00fcmesini o koleksiyon tipinden elde edebilirsiniz.Ama bu tipten kesinlikle eminseniz.O tipten elde etmeyipte var tipindende edebilirsiniz.foreach d\u00f6ng\u00fcs\u00fc sayesinde o koleksiyonda d\u00f6nerken, ele al\u0131nan her eleman\u0131 var de\u011filde, o tipten kar\u015f\u0131layabilirsiniz.<br \/>\n\u00d6rnek olarak a\u015fa\u011f\u0131daki kodlar\u0131 inceleyiniz.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n            DirectoryInfo DosyaBilgileri = new DirectoryInfo(&quot;C:\/&quot;);\r\n            \/\/C dizisindeki dosyalar\u0131n bilgilerini \u00f6\u011frenmek istiyorum.\r\n            FileInfo&#x5B;] Dosyalar = DosyaBilgileri.GetFiles();\r\n            \/\/GetFiles() metodu sayesinde b\u00fct\u00fcn dosyalara ula\u015fabilirim.FileInfo&#x5B;] dizisi tipinden geri d\u00f6nmektedir.\r\n            \/\/\u00d6rnek olarak bu dosyalardan boyutu 1000 den b\u00fcy\u00fck olanlar\u0131 LINQ diliyle sorgulay\u0131p se\u00e7elim.\r\n            var Sonuc = from Dosya in Dosyalar\r\n                               where Dosya.Length &gt; 1000\r\n                               select Dosya;\r\n            \/\/G\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi sonu\u00e7 k\u00fcmesi var tipinden Sonuc de\u011fi\u015fkenine atand\u0131.\r\n            foreach (FileInfo item in Sonuc)\r\n            {\r\n                listBox1.Items.Add(item.Name + &quot; - &quot; + item.Length);\r\n            }\r\n            \/\/G\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi, var tipinden Sonuc de\u011fi\u015fkenin i\u00e7inde FileInfo nesneleri oldu\u011funu kesin bildi\u011fim i\u00e7in d\u00f6ng\u00fcdeki ele al\u0131nan her eleman\u0131 FileInfo tipinden kar\u015f\u0131layabiliyorum.\r\n<\/pre>\n<hr \/>\n<p>Yukar\u0131daki i\u015flemin sonucunu istedi\u011fim bir s\u0131n\u0131f\u0131n entitysi olarakta d\u00f6nebilirim.\u00d6rne\u011fin, DosyaBilgisi ad\u0131nda bir class yazd\u0131\u011f\u0131m\u0131z\u0131 d\u00fc\u015f\u00fcnelim.LINQ komutlar\u0131yla &#8220;C&#8221; dizisindeki dosyalar\u0131 yoklay\u0131p onlar\u0131n FileInfo tipinden b\u00fct\u00fcn \u00f6zelliklerini al\u0131p, &#8220;select&#8221; anahtar s\u00f6zc\u00fc\u011f\u00fcyle arkaplanda olu\u015fturulan koleksiyona at\u0131yorduk.Yani gelen nesneyi geldi\u011fi gibi g\u00f6nderiyorduk.Ancak ben gelen nesneyi, kendi istedi\u011fim(DosyaBilgisi) nesnesinden d\u00f6nd\u00fcrmek istiyorum.<br \/>\nAnlatmak istedi\u011fimi kodlar \u00fczerinden izah etmeye \u00e7al\u0131\u015fay\u0131m.<br \/>\n\u00d6ncelikle DosyaBilgisi ad\u0131nda bir class olu\u015ftural\u0131m.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n        class DosyaBilgisi\r\n        {\r\n            public int DosyaBoyutu { get; set; }\r\n            public string DosyaAdi { get; set; }\r\n            public DateTime OlusturulmaTarihi { get; set; }\r\n        }\r\n<\/pre>\n<p>Class\u0131m\u0131z\u0131 olu\u015fturduk.Ard\u0131ndan LINQ sorgulama yap\u0131p, DosyaBilgisi entityleri geri d\u00f6nd\u00fcrelim.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n            DirectoryInfo DosyaBilgileri = new DirectoryInfo(&quot;C:\/&quot;);\r\n            FileInfo&#x5B;] Dosyalar = DosyaBilgileri.GetFiles();\r\n            var Sonuc = from Dosya in Dosyalar\r\n                        where Dosya.Length &gt; 1000\r\n                        select new DosyaBilgisi\r\n                        {\r\n                             DosyaAdi = Dosya.Name,\r\n                              DosyaBoyutu = Dosya.Length,\r\n                               OlusturulmaTarihi = Dosya.CreationTime\r\n                        };\r\n<\/pre>\n<p>G\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi, Dosyalar koleksiyonunda LINQ sayesinde sorgulama yap\u0131yorum ve sonu\u00e7 k\u00fcmesi olarak &#8220;select Dosya&#8221; deyip komple FileInfo tipinden nesneyi arka plandaki olu\u015fturulan koleksiyona g\u00f6ndermiyorum.Art\u0131k \u015fart\u0131ma uygun FileInfo nesnelerinin istedi\u011fim \u00f6zelliklerini, DosyaBilgisi entitysinin \u00f6zelliklerine verip arka plandaki olu\u015fturulan koleksiyona DosyaBilgisi nesnesi g\u00f6nderiyorum.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n            DirectoryInfo DosyaBilgileri = new DirectoryInfo(&quot;C:\/&quot;);\r\n            FileInfo&#x5B;] Dosyalar = DosyaBilgileri.GetFiles();\r\n            var Sonuc = from Dosya in Dosyalar\r\n                        where Dosya.Length &gt; 1000\r\n                        select new DosyaBilgisi\r\n                        {\r\n                             DosyaAdi = Dosya.Name,\r\n                              DosyaBoyutu = Dosya.Length,\r\n                               OlusturulmaTarihi = Dosya.CreationTime\r\n                        };\r\n<\/pre>\n<p>ListBox&#8217;a sonu\u00e7 k\u00fcmesindeki de\u011ferleri yazd\u0131rmak istedi\u011fimiz zaman bak\u0131n neler oluyor.<br \/>\n<a href=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2012\/05\/nokta.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-594\" title=\"nokta\" src=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2012\/05\/nokta.jpg\" alt=\"\" width=\"230\" height=\"192\" \/><\/a>Art\u0131k item.(nokta) dedi\u011fimizde, DosyaBilgisi ad\u0131ndaki s\u0131n\u0131f\u0131m\u0131z\u0131n propertyleri g\u00f6z\u00fck\u00fcyor.\u00d6nceden FileInfo nesnesini direkt g\u00f6nderdi\u011fimizden item.(nokta) dedi\u011fimizde FileInfo s\u0131n\u0131f\u0131n\u0131n \u00f6zellikleriyle kar\u015f\u0131la\u015f\u0131yorduk.Aradaki fark\u0131 umar\u0131m yakalayabilmi\u015fsinizdir.<br \/>\nBu yaz\u0131m\u0131n sonunada gelmi\u015f bulunmaktay\u0131z.Elimden geldi\u011fi kadar a\u00e7\u0131klay\u0131c\u0131 bir \u015fekilde LINQ ya giri\u015f yapmak istedim.Umar\u0131m faydas\u0131n\u0131 g\u00f6r\u00fcrs\u00fcn\u00fcz.Sonraki yaz\u0131lar\u0131mda g\u00f6r\u00fc\u015fmek \u00fczere.<br \/>\n\u0130yi \u00e7al\u0131\u015fmalar.<\/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>LINQ (Language Integrated Query) yani &#8220;Dil ile B\u00fct\u00fcnle\u015fik Sorgu&#8221; anlam\u0131na gelen, .NET dillerinde veritaban\u0131 sorgulama i\u015flemini programatik k\u0131s\u0131mda ger\u00e7ekle\u015ftirebilmemizi sa\u011flayan, Microsoft .NET Framework bile\u015fenidir. Bu yaz\u0131 LINQ &#8216; ya giri\u015f niteli\u011fi ta\u015f\u0131maktad\u0131r. LINQ TO&#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":[227,751],"class_list":["post-593","post","type-post","status-publish","format-standard","hentry","category-asp-net","category-c-sharp-c","category-linq","tag-language-integrated-query","tag-linq"],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/593","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=593"}],"version-history":[{"count":0,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/593\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media?parent=593"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/categories?post=593"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/tags?post=593"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}