Bu yazımda LINQ’da Group By ifadesinin nasıl kullanıldığından bahsedeceğim.

Bu yazımda LINQ’da Group By ifadesinin nasıl kullanıldığından bahsedeceğim.

Gruplama işlemini daha somut anlatabilmek için aşağıdaki örneği inceleyiniz.
Spain ülkesinde yaşayan müşterilerimizi çekip , şehir ve müşteri id lerini yazdıralım.

NorthwindDataContext Northwind = new NorthwindDataContext();
var Sonuc = from musteri in Northwind.Musterilers
            where musteri.Ulke == "Spain"
            select musteri;
foreach (var item in Sonuc)
{
    listBox1.Items.Add(item.Sehir + " - " + item.MusteriID);
}

 

Bu kod bloğunu derleyip çalıştırırsak eğer, aşağıdaki gibi bir sonuçla karşılaşırız.

Burada gruplama işlemi nasıl kullanılabilir.Öncelikle bunu konuşalım.Madrid’de,Barcelona’da ve Sevilla’da kaç müşteri mevcut? sorusuna cevap arıyorsanız eğer gruplama işlemi mecburidir.
Üç tane Madrid ve birer Barcelona ve Sevilla mevcut.Barcelona ve Sevilla tek olduğundan dolayı gruplamayla ilgili sıkıntımız yok.Ancak üç tane Madrid’i gruplamamız gerekiyor.Yani tek Madrid yapmamız gerekiyor. Bu işlemleri SQL Server’da nasıl yapıldığını, Şimdi LINQ teknolojisi ile yapmayı görelim.

NorthwindDataContext Northwind = new NorthwindDataContext();
var Sonuc = from musteri in Northwind.Musterilers
            where musteri.Ulke == "Spain"
            group musteri by musteri.Sehir into Grup
            select new
            {
                Musteri = Grup,
                Sehir = Grup.Key
            };
foreach (var item in Sonuc)
{
    listBox1.Items.Add(item.Sehir + " şehrinde " + item.Musteri.Count() + " adet müşterimiz mevcut.");
    foreach (var musteri in item.Musteri)
    {
        listBox1.Items.Add("-->" + musteri.MusteriID);
    }
}

Yukarıda gördüğünüz gibi Group By ifadesi SQL Server versiyonundan biraz farklı.Şimdi bunu izah edeyim.
” group musteri by musteri.Sehir into Grup ” öncelikle bu satırı ele alalım.
“group” anahtar sözcüğünden sonraki “musteri” isimli parametre, hangi nesnenin gruplanacağını belirtir.”by” anahtar sözcüğünden sonraki ifadede, gruplanacak nesnenin(musteri) hangi propertysinin(özellik) gruplanacağı belirtilir.”into” anahtar sözcüğünden sonra “Grup” isimli parametrede ise bu grup saklanır.Buradaki parametrelerin isimlerini siz özgür iradelerinizle değiştirebilirsiniz.

select new
{
Musteri = Grup,
Sehir = Grup.Key
};

Şimdide bu kod bloğunu izah edeyim.”into” anahtar sözcüğünden sonra “Grup” adındaki parametrenizin “Key” özelliği, gruplanan propertyleri saklarken , “Grup” parametresinin kendisi, gruplanan “musteri” adındaki nesneyi saklar.
Sonuç olarak yukarıdaki kodların çıktısı aşağıdaki gibi olacaktır.

Son olarak yukarıdaki işlemleri Extension metodla nasıl yapabiliriz onu göstermek istiyorum.

NorthwindDataContext Northwind = new NorthwindDataContext();
var Sonuc = Northwind.Musterilers.Where(Musteri => Musteri.Ulke == "Spain").GroupBy(Musteri => Musteri.Sehir);
foreach (var item in Sonuc)
{
    listBox1.Items.Add(item.Key + " şehrinde " + item.Count() + " adet müşterimiz var.");
    foreach (var Musteri in item)
    {
        listBox1.Items.Add("-->>" + Musteri.MusteriID);
    }
}

Son bir örnek yapıp konuyu kapatmak istiyorum.
Yıla göre elde ettiğimiz gelirler.

//LINQ teknolojisiyle..
            NorthwindDataContext Northwind = new NorthwindDataContext();
            var Sonuc = from detay in Northwind.Satis_Detaylaris
                        group detay by detay.Satislar.SatisTarihi.Value.Year into Grup
                        select new
                        {
                            Gelir = Grup.Sum(Satis => Satis.Miktar * Satis.BirimFiyati),
                            Yil = Grup.Key
                        };
            foreach (var item in Sonuc)
            {
                listBox1.Items.Add(item.Yil + " yılında " + item.Gelir + " gelirimiz var");
            }
//Extension metod ile
            NorthwindDataContext Northwind = new NorthwindDataContext();
            var Sonuc = Northwind.Satis_Detaylaris.GroupBy(Satis => Satis.Satislar.SatisTarihi.Value.Year);
            foreach (var item in Sonuc)
            {
                listBox1.Items.Add(item.Key + " yılında toplam " + item.Sum(Satis=>Satis.Miktar * Satis.BirimFiyati) + " gelir elde edilmiştir.");

Bu örneğide derleyip çalıştırdığınız zaman gruplanmış şekilde yıllara göre gelirleri gösterdiğini göreceksiniz.
Artık LINQ’da Group By anahtar sözcüğüyle gruplama işlemini rahatlıkla yapabiliriz.

Gençay Yıldız ın tüm makalelerine bu linkten ulaşabilirsiniz. 

İlgili Makaleler

Bu yazıya 0 yorum yapılmış.

Yorum Gönder