En iyi yanıtlayıcılar
Sql cümlesini entity frameworkde yazma ile ilgili

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ı)
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
Tüm 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
-
-
Abi bu satırdakı stok tablosu gözükmüyor.
Total = Math.Round((s.Miqdar*s.Satis)-(s.Miqdar * (s.Stok.Alis/dividend)),2)
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. -
-
Stokta bir Product'dan niye N tane var ki. Senin SQL nasıl dogru sonuc veriyor ben de anlamadım.
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. -
Abi stokda bir Productan 1 tane var. (productid UNIQUE )
s.Product.Stok. yaptığımda kolon adları gelmiyor. O yüzden FirstOrDefault kullanmak mecburiyyetinde kaldım.
Total = Math.Round((s.Miqdar*s.Satis)-(s.Miqdar * (s.Product.Stok., burada kolonlar gelmiyor/dividend)),2)
- Düzenleyen vusal.nurehmedov 20 Kasım 2019 Çarşamba 20:59
-
Modelin hatalı o zaman. Neyse nasıl istersen oyle yap.
Not: Create table'a gore söylediğin gibi degil. Product-Stok 1-to-1 degil 1- to- many.
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.
- Düzenleyen CetinBasozEditor 20 Kasım 2019 Çarşamba 21:02