none
Sql cümlesini entity frameworkde yazma ile ilgili RRS feed

  • Soru

  • Merhaba. Postgrsql-de tablo yapim bu sekildedir.  Burada urunler hem kutu hemde adet olarak satila bilir.
     Satilan urunlerin karını bulmam lazım.  Mantık bakımından yanlış olduğunu biliyorum. Sağ olsun Cetin abi doğru yolunu gösterdi bu başka bir proje burada bu yolla gitmem lazım (yanlışda olsa sorun diyil)  Stok tablosunda urunun en son alış fyatı tutuluyor. Sqlde yaptığım kod sorunsuz çalışıyor ama entity frameworkde yazamadım. Bunu nasıl yaza bilirim?

    CREATE TABLE product
    (
    id serial PRIMARY KEY NOT NULL,
    barcode varchar(50) NOT NULL,
    productname varchar(50) NOT NULL,
    eded_say int NOT NULL
    );
    
    CREATE TABLE stok
    (
    id serial PRIMARY KEY NOT NULL,
    productid int NOT NULL,
    toplam_miqdar int NOT NULL,
    alis numeric(6,2) NOT NULL,
    durum boolean NOT NULL default false,
    FOREIGN KEY(productid) REFERENCES product(id) on delete cascade on update cascade
    );
    
    
    );CREATE TABLE sale
    (
    productid int NOT NULL,
    miqdar int NOT NULL,
    birim varchar(20) NOT NULL,
    satis numeric(6,2) NOT NULL,
    durum boolean NOT NULL default false,
    FOREIGN KEY(productid) REFERENCES product(id) on delete cascade on update cascade
    );

     SELECT s.*,Round((s.miqdar*s.satis)-(s.miqdar * (CASE WHEN s.durum = true THEN
    sk.alis ELSE sk.alis/p.adetsay END)),4) as Total from sale AS s INNER JOIN stok AS sk ON sk.ProductId = s.ProductId inner join
     product as p on p.id = s.productid;

    Eger sale tablosunda durum ture -ise yani ürün kutu ile satılmışsa bu şekilde - (satiş fiyatı * satış miqdar) - (aliş fiyatı * satış miqdarı) yok durum false ise yani adetle satılmlşsa bu şekilde  (satiş fiyatı * satış miqdar) - ((aliş fiyatı/adetsayı) * satış miqdarı) 

    19 Kasım 2019 Salı 14:03

Yanıtlar

  • var sonuc = from s in db.Sale
                let dividend = s.durum ? 1 : s.Product.Adetsay
    			select new {
    				s.X,
    				s.Y,
    				s.Miqdar,
    				s.Satis,
    				// s.Digeralanlar,
    				Total = Math.Round((s.Miqdar*s.Satis)-(s.Miqdar * (s.Stok.Alis/dividend)),4)
    			};
    

    Dogrudan calisan SQL'ini de kullanabilirdin (sonuca uyan bir X Class varsa):

    var sql = @"SELECT s.*, 
    Round((s.miqdar* s.satis)-(s.miqdar * 
       (CASE WHEN s.durum = true THEN sk.alis ELSE sk.alis/p.adetsay END)),4) as Total 
    from sale AS s 
    INNER JOIN stok AS sk ON sk.ProductId = s.ProductId 
    inner join product as p on p.id = s.productid";
    
    var sonuc = ctx.Database.SqlQuery<X>(sql);
    



    How to create a Minimal, Reproducible Example
    The way to Go.
    World's most advanced open source (object-) relational Database.
    Flutter (for mobile, for web & desktop.

    • Yanıt Olarak Öneren A_BLR 19 Kasım 2019 Salı 19:23
    • Yanıt Olarak İşaretleyen vusal.nurehmedov 21 Kasım 2019 Perşembe 05:10
    19 Kasım 2019 Salı 14:50
    Yanıtlayıcı

Tüm Yanıtlar