私はlinqとEFのスターターです。私は4つのテーブルを持っています
通貨単位
CurrencyUnitID CurrencyName
-------------------------------
1 Dolar
2 Pond
リクエスト
RequestID WayBillNo
--------------------------
1 10000
2 10001
コストタイプ
CostTypeID CostName
-------------------------------
1 A
2 B
リクエストコスト
RequestId CostId CurrencyUnitId Amount Remark
-----------------------------------------------------------
1 1 1 200
1 2 1 400
2 2 2 1000
この4つのテーブルに参加して、この結果を得たい
結果(テーブル)
RequestId WayBillNo CostId CostName CurrencyUnitId CurrencyUnitName Amount Remark
------------------------------------------------------------------------------------------
1 10000 1 A 1 Dollar 200
1 10000 2 B 2 Pond 400
2 10001 1 A 0 0
2 10001 2 B 2 Pond 1000
私はこのクエリを書きます
var items = (from rc in context.CLEARANCE_COST
join c in context.COST_TYPES on rc.COST_ID equals c.COST_ID
join d in context.CLEARANCE_REQUEST on rc.REQUEST_ID equals d.REQUEST_ID
join f in context.CURRENCY_UNITS on rc.CURRENCY_ID equals f.CURRENCY_ID
select new
{
rc.COST_AMOUNT,
c.COST_ID,
c.COST_NAME,
d.WAYBILL_NO,
f.CURRENCY_NAME
}).ToList();
しかし、この結果を取得します(Bテーブル)
RequestId WayBillNo CostId CostName CurrencyUnitId CurrencyUnitName Amount Remark
1 10000 1 A 1 Dollar 200
1 10000 2 B 2 Pond 400
2 10001 2 B 2 Pond 1000
つまり、リクエストにコストがかかっていない場合、このリクエストのすべてのコストを表示し、Amount 値を 0 に設定します。たとえば、A テーブルには 4 行あり、B テーブルにはテーブル A に 3 行あり、リクエスト 2 のコストは 1 です。金額 0 を設定しますが、テーブル B には設定されていません。セットしたい。