Entity Framework ile bir tablodaki en çok tekrar eden kayıtlar nasıl bulunur

Merhaba arkadaşlar bu makalemde entity frame work'te bir tablodaki en çok tekrar eden 5 kaydı getirmeyi anlatacağım.

Yaptığım bir e-ticaret işimde raporlama kısmında lazım olmuştu makale haline getirdim.

Örnek: Verilen sipariş ürünlerinden en çok sipariş verilen ürünleri ve bunların sayısını büyükten küçüğe sıralayıp liste halinde veren sorgu.

Veritabanı tabloları
1) siparisler
2) siparis_urunleri (siparis_id Foreign Key ile siparisler tablosuna bağlı, urun_id Foreign Key ile urunler tablosuna bağlı)
3) urunler


Sorgu:


siteEntites db = new siteEntities();
var results = db.siparis_urunler.GroupBy(g => g.urun_id).Where(w => w.Count()>1)
         .Select(s =>
             new {
               s.FirstOrDefault().urunler.urun_adi,
              adet = s.Count()
            }).Distinct().Take(5).OrderByDesceding(o=>o.adet).ToList();

Çıktısı:

 

En Çok Sipariş Verilen 5 Ürün
Ürün Adı Adet
Flash Bellek 50
CD 42
Usb Kablo 33
Monitör 20
Hoparlör 15

Adımlar

1) Önce verilerimi GrupBy ile urun_id ye göre grupluyorum
2) Tekrar eden dediğimiz için Where ile sayısı 1 den fazla olanları filtreliyorum
3) FirstOrDefault diyerek urunler tablosuna çıkıp ürünün adını alıyorum
4) Grupladığım ürünün sayısını alıyorum
5) Büyükten küçüğe sıralıyorum

İyi Kodlar!