Linq, Lambda Kullanım Notları – 1

Lambda expressions, yani lambda  ifadeleri, verilen filtrelere ve belirlenen kriterlere göre, değişkenlere değer atamaya yarayan fonksiyonlar olarak düşünülebilir. Genellikle diziler veya entity listeleri üzerinde kolayca sorgu yapmamızı sağladığı için, sql üzerinden yapabileceğimiz pek çok sorguyu bu fonksiyonlar sayesinde halledebiliriz.

Bu makalede, ASP.NET de, c# üzerinden linq, lambda kullanımına ait ifadeleri örnekler üzerinden inceleyeceğiz.

Her bir ifade için kullanacağımız örnek tablo ve listeler:

  • int[] Sayilar1 = new int[] { 1, 2, 3, 4, 5}
  • int[] Sayilar2 = new int[] { 1, 3, 7, 7, }
  • string[] Renkler= new string[] {“Beyaz”,”Mor”}

1 – Where Kullanımı

Where kullanımı , tıpkı SQL de olduğu gibi liste ya da tablolarda filtreleme yapmak için kullanılır. Temel olarak “eşit“, “eşit değil“, “büyük“, “küçük” gibi ifadeler kullanılabildiği gibi özel ifadelerin de kullanımı vardır. Özel ifadeler için örnekler verilecektir.

Temel kullanımına ait basit örnek:

IEnumerable<City> CityList  = City.Where(x => x.CounytyId == 1);

Sonuç : Hannover ve Münih’in bulunduğu City listesini döndürür.

IEnumerable SayiListesi  = Sayilar1.Where(x => x >= 3);

Sonuç : {3, 4, 5} listesini döndürür.

Örnekte görüldüğü üzere,  Filtreleme yapılmak istenen tablo ya da liste ismi yazılarak, yanına “where” ifadesi eklenip, parantez içinde de istenilen filtreleme işlemi yapılır. Burada dikkate edilecek ilk ifade “=>” ifadesidir. Linq da lambda ifadeleri yazabilmek için, bu işaret kombinasyonu kullanılır. İkinci olarak da “==” ifadesi kullanımıdır. Lamda kullanımında “=” ifadesi atama yapmak için kullanılır.

2 – OrderBy / OrderByDescending /  ThenBy Kullanımı

Sorgularımızı artan şekilde sıralamak için “OrderBy”, azalan şekilde sıralamak için ise “OrderByDescending” ifadelerini kullanırız. Aynı sorgu içinde birden fazla sıralama işlemi yapmak için ise, “ThenBy” ve “ThenByDescending” ifadelerini kullanırız.

Örnek Olarak:

IEnumerable<City> CityList = City.Where(x => x.CounytyId == 3)
.OrderBy(x=>x.CityName).ThenBy(x=>x.CounytyId);

Sonuç : {6, ”Ankara”, 3} , {3, ”Bolu”, 3} , {4, ”Denizli” ,3}

3 – Select Kullanımı

Liste içerisinden sadece belirlediğimiz değerlerin listesini döndürmek için kullanılır.

Örnek Olarak:

IEnumerable<String> x = City.Where(x => x.CounytyId == 1)
.Select(p => p.CityName);

Sonuç :{”Hannover” , ” Münih”}

var Cities =prod City.Where(x => x.CounytyId == 1)
.Select(x => new { x.Id, x.CityName}).ToList();

Sonuç : {1, ”Hannover”} , {5, ”Münih”}

4 – SelectMany Kullanımı

Birden fazla tablo ya da veri kaynağını birleştirip tek bir liste içinde göstermek için bu ifade kullanılır. Sql de bulunan Cross Join işlemine benzer.

Örnek Olarak:

var  Cities= Country.SelectMany(x=> Sayilar2,
(x,y) => new{Sayi = x, Renk = y});

Sonuç : {1,”Beyaz”} , {3,”Beyaz”} , {7,”Beyaz”} , {7,”Beyaz”} , {1,”Mor”} , {3,” Mor “} , {7,” Mor “} , {7,” Mor “}

5 – Join Kullanımı

Birden fazla tablo ya da veri kaynağını belirli bir anahtar değere göre birleştirip tek bir liste içinde göstermek için bu ifade kullanılır. SQL de bulunan inner join işlemine benzer.

Örnek Olarak:

var SayiListesi= Sayilar1.Join(Sayilar2, x => x, y => y,
 (x,y) => x);

Sonuç : {1, 3}

6 – GroupJoin Kullanımı

Birden fazla tablo ya da veri kaynağını, belirli bir anahtar değere göre gruplayarak birleştirip tek bir liste içinde göstermek için bu ifade kullanılır. Sql de bulunan left outer join işlemine benzer.

Örnek Olarak:

var  CitiesOfCountries= Country.GroupJoin(City, x => x.Id, y => y.CountryId,
 (x,y)=> new{Country = x.CountryName, City = y.CityName});

Sonuç : {“Almanya”,”Hannover”} , {“Tokyo”,”Japonya”} , { “Türkiye” ,”Bolu”} , { “Türkiye” ,”Denizli”} , { “Almanya” ,”Münih”} , { “Türkiye” ,”Ankara”}

7 – GroupBy Kullanımı

Liste içindeki elemanları, belirlenen anahtar değere veya ifadeye göre gruplar.

Örnek Olarak:

var SayiListesi= Sayilar1.GroupBy(x => (x % 2 == 0));

Sonuç : {true , {2, 4} } , { flase , {1, 3, 5} }

8 – Contains Kullanımı

Liste içerisinde belirtilen elemanın olup olmadığı bilgisini true/false olarak döner. Farklı bir kullanım olarak, “where” ifadesi içinde de kullanılır.

Örnek Olarak:

IEnumerable SayiListesi  = Sayilar1.Contains(3);

Sonuç : true

var Cities= City.Where(x => Sayilar2.Contains(x.Id))
.Select(x=>x.CityName);

Sonuç : {“Hannover” , “Bolu”}

9 – All /Any Kullanımı

All” ifadesi, liste içerisindeki tüm elemanlar için, belirtilen koşulun sağlanıp sağlanmadığı bilgisini true/false olarak döner. “Any” ifadesi ise, listedeki herhangi bir değerin, koşulu sağlayıp sağlamadığı bilgisini true/false olarak döner.

Örnek Olarak:

IEnumerable SayiListesi  = Sayilar1.All(x => x % 2 == 0);

Sonuç : false

var City= City.Any(n => n.StartsWith("B"));

Sonuç : true

10 – Take / TakeWhile Kullanımı

Take” komutu, liste içinden baştan istediğimiz kadar elemanı döndürmeyi, “TakeWhile” ise, belirtilen filtreleme işlemine kadar olan elemanları döndürmeyi sağlar.

Örnek Olarak:

IEnumerable SayiListesi  = Sayilar1.Take(3);

Sonuç : {1, 2, 3}

IEnumerable SayiListesi  = Sayilar1.TakeWhile(x => x<3);

Sonuç : {1, 2}

11 – Skip / SkipWhile Kullanımı

Skip” komutu, liste içinden belirttiğimiz sayıdaki elemanı atlayıp, kalan listeyi döndürmeyi, “SkipWhile” ise, belirtilen filtreleme işlemi kadar elemanı atlayıp, kalan listeyi döndürmeyi sağlar.

Örnek Olarak:

IEnumerable SayiListesi  = Sayilar1.Take(3);

Sonuç : {4, 5}

IEnumerable SayiListesi  = Sayilar1.TakeWhile(x => x<3);

Sonuç : {3, 4, 5}

Makalenin devamı ve diğer kullanımlar için tıklayınız

Tags:

One thought on “Linq, Lambda Kullanım Notları – 1

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir