Linq2Sql ile Karışık Join Sorguları



Linq2Sql bazen karmaşık sorgular yazmamız gerekebiliyor.Aslında çok karışık olduğundan değil de işin içine join ve gruplama mantığı girdiği için adı karmaşık sorgular oluveriyor. Örnek olarak vermek istediğim nokta;bir e-ticaret uygulamasında en çok satan 10 ürünü listelememiz gerektiğini düşünelim.Hatta bununla birlikte ilgili üründen kaç edet satılmış ve ne kadar hasılat elde edildiğini de öğrenmek isteyelim.Benzer karmaşık sorgularda emsal teşkil etmesi amacı ile önemli bulduğum bir nokta.Kısaca açıklamak gerekirse aşağıda siparişteki ürünleri UrunId’ye göre gruplayıp,grup ile Ürünleri birleştrip ilgili fonksyionlar ile değerleri alıyoruz.Burada öenmli olan database’de Sipariş verilen ürünler için SiparistekiUrunler ve satışa hazır olan ürünler için Urunler adında tablolarımız olduğunu varsayıp ilgili entity’lerin oluşturulduğunu varsayıyıorum.

var encokSatanUrunler = (from s in data.SiparistekiUrunlers
                             group s by s.UrunId
                                 into g
                                 from u in data.Urunlers
                                 where g.Key == u.UrunId
                                 select new
                                 {
                                     ToplamAdet = g.Count(),
                                     UrunId = u.UrunId,
                                     UrunAdi = u.UrunAdi,
                                     ToplamHasılat=g.Select(x=>x.Fiyat).Sum()
                                 }).Take(10);

Buradan gelen anonim tipdeki result seti direk datalist,repeater gibi bir data kontrolüne, data source olarak da verebiliriz.

repeaterEnCokSatanlar.DataSource = encokSatanUrunler ;
repeaterEnCokSatanlar.DataBind();
<asp:Repeater ID="repeaterEnCokSatanlar" runat="server">
        <ItemTemplate>
Ürün Id:<%#Eval("UrunId")%> Ürün Adı:<%#Eval("UrunAdi")%>Satılan Adet:<%#Eval("ToplamAdet")%> Toplam Hasılat:<%#Eval("ToplamHasılat")%>
         </ItemTemplate>
  </asp:Repeater>

  • Facebook
  • FriendFeed
  • Twitter
  • Google
  • Live
  • LinkedIn



ASP.net ile ilgili teknolojileri son sürat takip eden ve yenilikleri öğrenmek için ne gerekiyorsa yapan, yeri geldiğinde masaüstü yazılım bile hazırlayabilme cesaretini gösteren bir programcıdır kendisi. Her yazılımcı gibi kodlarla boğuşmaktan geceleri gözüne uyku girmeyen ve kafasına takıldı mı sorunları çözmekten geri durmayıp çözene kadar üzerine üzerine giden bir kişiliği vardır.

© 2011 Mustafa Ülkü'nün Not Defteri. Her hakkı saklıdır..
İmkansız diye bir şey yoktur..