26 Temmuz 2016 Salı

Linq Grouping Data Metodları

Giriş
Grouping Data metodları sonucu gruplar halinde döndürürler.

GroupBy metodu (1) - Tek Seviyeli Gruplar
SQL'deki groupby ile aynı şekilde çalışıyor. Eşit değerlere sahip elemanları grupluyor. Gruplama sonucunda Key ve Count alanlarına sahip bir nesne listesi oluşturuluyor.

KeySelector
GroupBy ile KeySelector yazısına taşıdım

KeySelector + KeyCompararer
GroupBy ile KeySelector + KeyComparer yazısına taşıdım

KeySelector + KeyCompararer
GroupBy ile KeySelector + ResultSelector yazısına taşıdım


GroupBy metodu (2) - İçiçe Gruplar : Nested Groups
Bu kullanım şekli çok daha karmaşık. Elimizde yıl ve aya göre satışlar olsun. Satırları önce yıl sonra da aya göre gruplamak isteyelim. Yani şöyle bir sonuç istiyor olalım

  • 2014
    • April
      • T.Date = 11/04/2014, T.Title = "Book1", T.Tipology = "Book"
      • T.Date = 14/04/2014, T.Title = "Book2", T.Tipology = "Book"
  • 2015
    • May
      • T.Date = 02/05/2015, T.Title = "Spot1", T.Tipology = "Spot"
    • June
      • T.Date = 21/06/2016, T.Title = "Newspaper1", T.Tipology = "Newspaper"
Bu durumda nested groupby yapmak gerekir. GroupBy metodu aslında iki parametre alır. İlk parametre keySelector, ikincisi ise elementSelector nesneleridir. Yukarıdaki örneklerde elementSelector hiç kullanılmadı. Bu örnekte elementSelector tanımlıyoruz. Önce yıla göre grupluyoruz. Sonra elementSelector g parametresini yani elemanın kendisini kullanarak yeni alt gruplar döndürüyor.
var groups = list
            .GroupBy(
                    d => d.Date.Year, 
                    (key, g) => g.GroupBy(
                                          d => d.Date.Month,
                                          (key2, g2) => g2.GroupBy(d => d.Date)
                                         )
                    );
Sonucu şöyle dolaşabiliriz.
foreach(var year in Year)
 {
     foreach(var month in Month)
     {
         foreach(var day in Day)
         {
            Console.WriteLine(day.Item.Title);
            Console.WriteLine(day.Item.Tipology);
         }
         Console.WriteLine(month.ToString()); // With culture
     }
     Console.WriteLine(year.ToString());
 }

ToLookup metodu
ToLookup metodu yazısına taşıdım.

Hiç yorum yok:

Yorum Gönder