私は、次のスキーマがあります。SQLクエリにLinq to SQLクエリ内の計算カラムを参照できますか?
product
- productID (PK)
- name
- units
purchase
- purchaseID (PF)
- productID (FK)
- soldUnits
- woUnits
boxContents
- boxID (PK)
- puchaseID (FK)
- count
と、次のLINQを:
var qStockLevel = from pr in db.products
select new
{
pr.productID,
pr.name,
totalUnits = (from pu in db.purchases
where pu.productID == pr.productID
select pu).Count() * pr.units,
sold = (from pr2 in db.products
join pu in db.purchases on pr.productID equals pu.productID into pp
where pr2.productID == pr.productID
from pu2 in pp.DefaultIfEmpty()
select (int?) pu2.soldUnits ?? 0).Sum(),
writtenOff = (from pr2 in db.products
join pu in db.purchases on pr.productID equals pu.productID into pp
where pr2.productID == pr.productID
from pu in pp.DefaultIfEmpty()
select (int?)pu.woUnits ?? 0).Sum(),
onDisplay = (from pr2 in db.products
join bc in db.boxContents on pr.productID equals bc.purchase.productID into bp
where pr2.productID == pr.productID
from bc in bp.DefaultIfEmpty()
select (int?)bc.count ?? 0).Sum(),
available = (totalUnits - sold - writtenOff - onDisplay),
};
末尾に「利用可能」の欄には動作しませんが、私はそれを含めました私が達成しようとしているもの、つまり既に生成された列から計算された列を示します。これは可能ですか?私はプレゼンテーション層でそれを行うことができましたが、これが最初に機能するかどうかを確認したかったのです。
また、私の(Linq初心者の)目には、writtenOffを生成して列を売っているため、クエリが非効率的に見えます。集約関数が関わっているときに、これを達成するためのよりよい方法がありますか?
ありがとうございました。
EDIT
もう一つ - 私は「利用可能」とは(あなたがする必要があります最後から二番目の行のために{} [新規]を選択します> 0