08 December 2016

LINQ (Language Integrated Query)

Önceki notlarımda .NET Framework 3.0 ile gelen yenilikler yer almıştı. LINQ – Language Integrated Query, yani Dil’e Entegre Edilmiş Sorgulama teknolojisi bu gelen yeniliklerle birlikte kullanılmaya başlamıştır. LINQ teknolojisinde veriler nesneler haline dönüşmüştür.

Öncelikle LINQ sorgularına göz atalım. Bir adet dizi oluşturalım:

var ogrenciler = new[]{
 new {ID=1,Ad="sema",Soyad="akyilmaz",Sirket="Btp1"},
 new {ID=2,Ad="aynur",Soyad="can",Sirket="Btp2"},
 new {ID=3,Ad="esma",Soyad="altun",Sirket="Btp3"},
 new {ID=4,Ad="eda",Soyad="deniz",Sirket="Btp4"},
 new {ID=5,Ad="gunay",Soyad="bayram",Sirket="Btp5"},
 new {ID=6,Ad="ahmet",Soyad="yilmaz",Sirket="Btp6"},
 };

SELECT Sorgusu:

IEnumerable<string> ogrenciAd= ogrenciler.Select(ogr => ogr.Ad);
 foreach (string ad in ogrenciAd)
 {
 Console.WriteLine(ad);
 }

Kodu çalıştırdığımızda isimlerin sıralandığını görebiliriz.

IEnumerable<string> ogrenciAdSoyad = ogrenciler.Select(ogr => ogr.Ad + "" + ogr.Soyad);
 foreach (string adsoyad in ogrenciAdSoyad)
 {
 Console.WriteLine(adsoyad);
 }

Anonim tiplerden yararlanacak olursak:

var ogrenciAdSoyad2 = ogrenciler.Select(ogr => new {FirstName = ogr.Ad, Lastname=ogr.Soyad }
 );
 foreach (var item in ogrenciAdSoyad2)
 {
 Console.WriteLine(item.FirstName + " " + item.Lastname);
 }

İkinci dizimiz aşağıdaki şekilde olsun:

var adresler = new[]
 {
 new {Sirket="Btp1",Sehir="Moskova",Ulke="Rusya"},
 new {Sirket="Btp2",Sehir="Antalya",Ulke="Türkiye"},
 new {Sirket="Btp3",Sehir="St.Petersburg",Ulke="Rusya"},
 new {Sirket="Btp4",Sehir="Antalya",Ulke="Türkiye"},
 new {Sirket="Btp5",Sehir="Moskova",Ulke="Rusya"},
 new {Sirket="Btp6",Sehir="Paris",Ulke="Fransa"},
 };

WHERE Sorgusu

//ülkesi Türkiye olan şirketler
 IEnumerable<string> turkiye = adresler.Where(tur => string.Equals(tur.Ulke, "Türkiye")).Select(t=>t.Sirket);
 foreach (string item in turkiye)
 {
 Console.WriteLine(item);
 }

Anonim tipte bir sorgu:

var turkiye2 = adresler.Where(tur=>string.Equals(tur.Ulke,"Türkiye"));
 foreach (var item in turkiye2)
 {
 Console.WriteLine(item.Sirket);
 }

ORDER BY Sorgusu:

IEnumerable<string> sirketAdlari = adresler.OrderBy(s => s.Sirket).Select(s1 => s1.Sirket);
foreach (string item in sirketAdlari)
 {
 Console.WriteLine(item);
 }

VEYA

var sirketadlari2 = adresler.OrderBy(s => s.Sirket);
 foreach (var item in sirketadlari2)
 {
 Console.WriteLine(item.Sirket);
}
//azalan sıraya göre sıralama
IEnumerable<string> sirketAdlari3 = adresler.OrderByDescending(s => s.Sirket).Select(s1=>s1.Sirket);
 foreach (string item in sirketAdlari3)
 {
 Console.WriteLine(item);
 }

GROUP BY Sorgusu

var ulkelereGoreSehirGruplamasi = adresler.GroupBy(g => g.Ulke);
 foreach (var item in ulkelereGoreSehirGruplamasi)
 {
 Console.WriteLine("-----------------------------------------");
 Console.WriteLine("Ülke: {0} ---> Şirket Sayısı {1}", item.Key, item.Count());
 foreach (var u in item)
 {
 Console.WriteLine("\n Şirket Adı: {0}", u.Sirket);
 }
 }
int sirketSayisi = adresler.Select(sayi => sayi.Ulke).Count();
 Console.WriteLine(sirketSayisi);
int tekrarsizUlkeSayisi = adresler.Select(s => s.Ulke).Distinct().Count();
 Console.WriteLine(tekrarsizUlkeSayisi);

JOIN Sorgusu

var sehirveUlkeler = ogrenciler.Select(
o => new { o.Ad, o.Soyad, o.Sirket }).Join(
 adresler, ogr => ogr.Sirket, adr => adr.Sirket, (ogr1, adr1) => new
 {
 ogr1.Ad,
 ogr1.Soyad,
 adr1.Ulke
 });
foreach (var item in sehirveUlkeler)
 {
 Console.WriteLine(item);
 }