Bir önceki makalemizde sıkça kullanılan LINQ metotlarını incelemiştik. Bugün ise GroupBy metodunun kullanımı hakkında bilgi vermeye çalışacağım. SQL tarafında yaptığımız gruplama işlemini, ram üzerindeki nesnelerde yapabilmemiz de mümkündür. Örnek üzerinden ilerlersek daha anlaşılır olacağını düşünüyorum.
Urun adında bir sınıf yazalım. Id,Ad ve Kategori adında 3 property’si olsun.
public class Urun
{
public int Id { get; set; }
public string Ad { get; set; }
public string Kategori { get; set; }
public Urun(int id, string ad, string kategori)
{
Id = id;
Ad = ad;
Kategori = kategori;
}
}
Bir Urun dizisi oluşturarak kategorilere göre gruplayalım, her kategoride kaç adet ürün olduğunu ve bu ürünlerin adlarını ekrana yazdıralım.
class Program
{
static void Main(string[] args)
{
Urun[] urunler = new Urun[]
{
new Urun(1,"Laptop","Elektronik"),
new Urun(2,"Monitör","Elektronik"),
new Urun(3,"Çamaşır Makinesi","Beyaz Eşya"),
new Urun(4,"IPhone","Cep Telefonu"),
new Urun(5,"Harddisk","Elekronik"),
new Urun(6,"Buzdolabı","Beyaz Eşya"),
new Urun(7,"Koltuk","Mobilya"),
new Urun(8,"Bulaşık Makinesi","Beyaz Eşya"),
new Urun(9,"Samsung Galaxy","Cep Telefonu"),
new Urun(10,"HTC","Cep Telefonu"),
new Urun(11,"USB","Elekronik"),
new Urun(12,"Masa","Mobilya"),
new Urun(13,"Sandalye","Mobilya")
};
foreach (var grup in urunler.GroupBy(urun => urun.Kategori))
{
Console.WriteLine("{0} kategorisine ait {1} adet ürün mevcuttur. Bu ürünler:\n", grup.Key, grup.Count());
foreach (Urun u in grup)
{
Console.WriteLine("\t{0}", u.Ad);
}
Console.WriteLine();
}
}
}
İlk döngü içerisindeki her bir turda, o kategoriye mensup ürün grupları elde edilir. “Key” property’si, gruplama yaptığımız elemanın tipi ile aynıdır. Gruplamayı Id’lere göre yapsaydık Key property’si int dönecekti. İkinci döngüde ise grup içerisindeki ürünler elde edilir.
Şimdi de aynı ürün dizisine alt kategoriler eklemeye çalışalım. Daha sonra kategoriye ve alt kategoriye göre gruplama işlemi yapalım.
public class Urun
{
public int Id { get; set; }
public string Ad { get; set; }
public string AltKategori { get; set; }
public string Kategori { get; set; }
public Urun(int id, string ad, string altKategori, string kategori)
{
Id = id;
Ad = ad;
Kategori = kategori;
AltKategori = altKategori;
}
}
class Program
{
static void Main(string[] args)
{
Urun[] urunler = new Urun[]
{
new Urun(1,"Laptop","Dizüstü Bilgisayar","Elektronik"),
new Urun(2,"Monitör","Bilgisayar Yedek Parça","Elektronik"),
new Urun(3,"X 7700 1000 Devir","Çamaşır Makinesi","Beyaz Eşya"),
new Urun(4,"IPhone 3GS","Cep Telefonu","Elektronik"),
new Urun(5,"Harddisk","Bilgisayar Yedek Parça","Elektronik"),
new Urun(6,"Y 5500 NoFrost","Buzdolabı","Beyaz Eşya"),
new Urun(7,"X Marka Tek Kişilik Koltuk","Koltuk","Mobilya"),
new Urun(8,"ZZZ 4250 150 Parça","Bulaşık Makinesi","Beyaz Eşya"),
new Urun(9,"Samsung Galaxy","Cep Telefonu","Elektronik"),
new Urun(10,"HTC","Cep Telefonu","Elektronik"),
new Urun(11,"USB","Bilgisayar Yedek Parça","Elektronik"),
new Urun(12,"IPhone 4S","Cep Telefonu","Elektronik"),
new Urun(13,"6 kişilik Masa","Masa","Mobilya"),
new Urun(14,"Ahşap Sandalye","Sandalye","Mobilya"),
new Urun(15,"Y Marka Çift Kişilik Koltuk","Koltuk","Mobilya"),
new Urun(16,"MN 8000 NoFrost","Buzdolabı","Beyaz Eşya")
};
foreach (var grup in urunler.GroupBy(u => u.Kategori))
{
Console.WriteLine("{0} kategorisi içerisinde {1} adet altKategori mevcuttur\n", grup.Key, grup.GroupBy(g => g.AltKategori).Count());
foreach (var altGrup in grup.GroupBy(g => g.AltKategori))
{
Console.WriteLine("\t{0} altKategorisi içerisinde {1} adet ürün mevcuttur\n", altGrup.Key, altGrup.Count());
foreach (Urun u in altGrup)
{
Console.WriteLine("\t\tUrun Adı : {0}", u.Ad);
}
Console.WriteLine();
}
}
}
}
Ekran çıktısı aşağıdaki gibi olacaktır.
1 yorum:
http://www.sonercelix.com/MakaleDetay/4066/Linq-groupping
Çok beğendiğim ve uzun süredir takip ettiğim bir sitedir. Bunun gibi bir çok konuda paylaşım yapıyor ve hepsi özgün paylaşımlardır. Tavsiye ederim.
Yorum Gönder