Linq Expression Join İşlemleri Group By ve Order By Kullanımı

Hiç yorum yok
Merhaba Arkadaşlar

Bu bölümde linq expression larda join işlemi kullanımına bakıyor olacağız.Yazağımız uygulama genel anlamda çoklu tablolar arasındaki ilişkilerden yararlanıp bunları linq ile tek sorgu haline getirip  datagridviewımızda listelemek olacak.

Yazmış olduğum proje üzerinden devam ederek kodları ve uygulamayı paylaşıyor olacağım. Veri Tabanı olarak KuzeyYelini kullanarak ilerledim.Uygulama içine Model adında bir klasör açıp add new item ile linq to sql classes ekleyip devam edelim ve global olarak eklemiş olduğumuz context nesnemizden instance alıp devam edelim

KuzeyYeliDataContext db = new KuzeyYeliDataContext();
    private void btnCoklu_Click(object sender, EventArgs e)
        {
            // Önemli Not join işlemlerinde ilk olarak ilk çağırılan tablonun kolonu ile eşleştirme yapılır
            lblSorgu.Text = "";
            lblSorgu.Text = "Satışı yapılan ürünü hangi personel satmış ad ve soyadı,hangi Musteri ye satmış,satış fiyatı,urun adi,kategori adı,indirim oranı gelsin";
            dgvSonuc.DataSource = from urun in db.Products
                                  join kat in db.Categories on urun.CategoryID equals kat.CategoryID
                                  join satisdetay in db.Order_Details on urun.ProductID equals satisdetay.ProductID
                                  join satis in db.Orders on satisdetay.OrderID equals satis.OrderID
                                  join musteri in db.Customers on satis.CustomerID equals musteri.CustomerID
                                  join personel in db.Employees on satis.EmployeeID equals personel.EmployeeID
                                  join teadrikci in db.Suppliers on urun.SupplierID equals teadrikci.SupplierID
                                  select new
                                  {
                                      UrunAdi = urun.ProductName,
                                      Fiyat = urun.UnitPrice,
                                      SatisFiyat = satisdetay.UnitPrice,
                                      Adet = satisdetay.Quantity,
                                      Indirim = satisdetay.Discount,
                                      Tedarikci = teadrikci.CompanyName,
                                      KategoriAd = kat.CategoryName,
                                      Musteri = musteri.CompanyName,
                                      Personel = personel.FirstName + "- " + personel.LastName,



                                  };
        }

 private void btniki_Click(object sender, EventArgs e)
        {
            /*Urunler tabloasundaki kategorileri aynı olan ürünler gelsin*/
            lblSorgu.Text = "";
            lblSorgu.Text = "Urunler tabloasundaki kategorileri aynı olan ürünler gelsin";
            dgvSonuc.DataSource = from urun in db.Products
                                  join kat in db.Categories on urun.CategoryID equals kat.CategoryID
                                  select new
                                  {
                                      urun.ProductName,
                                      kat.CategoryName,
                                      urun.UnitsInStock,
                                      urun.UnitPrice
                                  };
        }


lblSorgu.Text = "";
            /*hangi üründen Nekadar toplam Satış geliri elde edilmiş*/
            lblSorgu.Text = "hangi üründen Nekadar toplam Satış geliri elde edilmiş";
            var sorgu = from urun in db.Products
                        join satisdetay in db.Order_Details on urun.ProductID equals satisdetay.ProductID
                        group satisdetay by urun.ProductName into grup //ürünler tablosundaki urunadina  göre grupla
                        select new
                        {
                            UrunAdi = grup.Key, //grupladığımız alan adını key ifade eder
                            ToplamSatis = grup.Sum(x => x.UnitPrice * x.Quantity)
                        };
            dgvSonuc.DataSource = sorgu;

            /*yapılan işlemin t-sql sorgusu
             Select ProductName,Sum(satisdetay.Quantity*satisdetay.UnitPrice) as ToplamSatis from Products urun
join [Order Details] satisdetay on urun.ProductID=satisdetay.ProductID
group by urun.ProductName
            
             ======!!!!!!!!Önemli!!!=======
             Yukarda dikkat edilmesi gereken group by urun.ProductName ifadesi t-sql sorgusunda Select deyiminden hemen sonra ProductName gelmektedir.Yani bizim yazdığımız linq expressionlarda group by ifadesindeki Key 'i ifade etmektedir
             */

 private void btnOrderBy_Click(object sender, EventArgs e)
        {
            lblSorgu.Text = "";
            lblSorgu.Text = "Fiayata Az' dan Çoğa Göre Ürunleri Sırala";
            var sorgu = from urun in db.Products
                        orderby urun.UnitPrice
                        select urun;
            dgvSonuc.DataSource = sorgu;
        }


 private void button2_Click(object sender, EventArgs e)
        {
            lblSorgu.Text = "";
            lblSorgu.Text = "Fiayata Çoktan Az'a Göre Ürunleri Sırala";
            var sorgu = from urun in db.Products
                        join kategori in db.Categories on urun.CategoryID equals kategori.CategoryID
                        join tedarikci in db.Suppliers on urun.SupplierID equals tedarikci.SupplierID
                        orderby urun.UnitPrice descending
                        select new
                        {
                            urun.ProductName,
                            KategoriAdi = kategori.CategoryName,
                            Tedarikci = tedarikci.CompanyName,
                            UrunFiyat = urun.UnitPrice,
                            Adet = urun.UnitsInStock,
                        };
            dgvSonuc.DataSource = sorgu;
        }


 private void button3_Click(object sender, EventArgs e)
        {
            //burda istenilen alanları çekmek için tablolar arası join işlemlerinden sonra select keyword unden scopelarında ilgili alanları çekebilirsiniz.
            //Ben yukarda benzer örneği yaptığım için bu kısmı yazmadım
            lblSorgu.Text = "";
            lblSorgu.Text = "Satış Tarihine Göre Satışları Tersten Sırala ";
            var sorgu = from satis in db.Orders
                        orderby satis.OrderDate descending
                        select satis;
            dgvSonuc.DataSource = sorgu;
        }

        private void button4_Click(object sender, EventArgs e)
        {
            lblSorgu.Text = "";
            lblSorgu.Text = "Verilen Tarihe Göre Dataları Sırala  ";

            DateTime tarih = Convert.ToDateTime(maskedTextBox1.Text);

            var sorgu = from satis in db.Orders
                        where satis.OrderDate == tarih
                        select satis;
            dgvSonuc.DataSource = sorgu;
        }


Umarım faydalı olur.Örnek Proje İndir

Hiç yorum yok :

Yorum Gönder

Soru Görüş önerileriniz için gmail plus üzerinden + layın müsait olduğumda mutlaka yanıt dönüyor olacağım.