none
How To : Karmaşık Bir Linq Sorgusu Hk. RRS feed

  • Genel Tartışma

  • var countries = Formula1.GetChampions()
                  .GroupBy(r => r.Country)
                  .Select(g => new { Group = g, Count = g.Count() })
                  .OrderByDescending(g => g.Count)
                  .ThenBy(g => g.Group.Key)
                  .Where(g => g.Count >= 2)
                  .Select(g => new
                  {
                      Country = g.Group.Key,
                      Count = g.Count
                  });

    Arkadaslar bu linq sorgusunda  anlamadigim noktalar var 

    var countries = Formula1.GetChampions()
                  .GroupBy(r => r.Country)
                  .Select(g => new { Group = g, Count = g.Count() })  // Burda ki Group ve Count'a Set işlemleri  Group = g, Count = g.Count() ? Group nedir burda ki ?
                  .OrderByDescending(g => g.Count)
                  .ThenBy(g => g.Group.Key)   // ThenBy ne yapar 
                  .Where(g => g.Count >= 2)
                  .Select(g => new
                  {
                      Country = g.Group.Key,  // g. Group.Key  burda ki Key nedir ? bu ifade tam olarak ne yapar
                      Count = g.Count  // Count'u Count'a set etmiş neden :/
                  });

    Kıssa dan hisse birisi adım adım anlatabilir mi linq sorgusunu ?

    Özellikle Group.Key burası ne yapar ?


    4 Kasım 2016 Cuma 21:23

Tüm Yanıtlar

  • Bu kafa karistirici ornekleri de nerelerden buluyorsun :) Gereksiz yere uzatmis yaptigi isi.

    ".Select(g => new { Group = g, Count = g.Count() })  // Burda ki Group ve Count'a Set işlemleri  Group = g, Count = g.Count() ? Group nedir burda ki ?"

    Group orada kendi verdigin bir property ismi. Group demeyi uygun gormus.


                  .OrderByDescending(g => g.Count)
                  .ThenBy(g => g.Group.Key)   // ThenBy ne yapar 

    Once gruptakilerin sayisina gore buyukten kucuge dogru siraliyor. Eger birden fazla siralama gerekiyorsa, o zaman digerlerini ThenBy ya da ThenByDescending ile yapiyorsun. 


                  .Where(g => g.Count >= 2)
                  .Select(g => new
                  {
                      Country = g.Group.Key,  // g. Group.Key  burda ki Key nedir ? bu ifade tam olarak ne yapar

    Burada Key, gruplamada kullandigin key yani bastaki Country.


                      Count = g.Count  // Count'u Count'a set etmiş neden :/

    Soldaki Count property'e verdigi ad (Group'ta yaptigi gibi), Sayi, HowMany ... gibi bir isim de kullanabilirdi.  Sagdaki g.Count ise o gruptaki sayi.  

    Buldugun ornek pek de iyi degil. Ornegin OrderBy'i nerede yaptiginin onemi var. Normalde burada OrderBy islemini sona saklarsin. Sonucta sadece Country ve sayilarini aliyor ama arada gereksiz Group = g gibi atamalar var. Aynisinin bir baska yazim sekli :

    var countries = Formula1.GetChampions()
    			  .GroupBy(r => r.Country)
    			  .Where(g => g.Count >= 2)
    			  .Select(g => new { Country = g.Key, Adet = g.Count })
    			  .OrderByDescending(g => g.Adet)
    			  .ThenBy(g => g.Country);
    

    4 Kasım 2016 Cuma 22:17
  • Bu kafa karistirici ornekleri de nerelerden buluyorsun :) Gereksiz yere uzatmis yaptigi isi.

    ".Select(g => new { Group = g, Count = g.Count() })  // Burda ki Group ve Count'a Set işlemleri  Group = g, Count = g.Count() ? Group nedir burda ki ?"

    Group orada kendi verdigin bir property ismi. Group demeyi uygun gormus.


                  .OrderByDescending(g => g.Count)
                  .ThenBy(g => g.Group.Key)   // ThenBy ne yapar 

    Once gruptakilerin sayisina gore buyukten kucuge dogru siraliyor. Eger birden fazla siralama gerekiyorsa, o zaman digerlerini ThenBy ya da ThenByDescending ile yapiyorsun. 


                  .Where(g => g.Count >= 2)
                  .Select(g => new
                  {
                      Country = g.Group.Key,  // g. Group.Key  burda ki Key nedir ? bu ifade tam olarak ne yapar

    Burada Key, gruplamada kullandigin key yani bastaki Country.


                      Count = g.Count  // Count'u Count'a set etmiş neden :/

    Soldaki Count property'e verdigi ad (Group'ta yaptigi gibi), Sayi, HowMany ... gibi bir isim de kullanabilirdi.  Sagdaki g.Count ise o gruptaki sayi.  

    Buldugun ornek pek de iyi degil. Ornegin OrderBy'i nerede yaptiginin onemi var. Normalde burada OrderBy islemini sona saklarsin. Sonucta sadece Country ve sayilarini aliyor ama arada gereksiz Group = g gibi atamalar var. Aynisinin bir baska yazim sekli :

    var countries = Formula1.GetChampions()
    			  .GroupBy(r => r.Country)
    			  .Where(g => g.Count >= 2)
    			  .Select(g => new { Country = g.Key, Adet = g.Count })
    			  .OrderByDescending(g => g.Adet)
    			  .ThenBy(g => g.Country);

    Tesekkurler Cetin bey, 
    9 Kasım 2016 Çarşamba 17:24