2013-10-04 62 views
2

有人能告訴我如何將此查詢轉換爲linq?Linq中的子查詢

SELECT dpr_ts 
     ,dpr_close 
     ,nvl((SELECT pay.pay_dividend 
      FROM pay 
     WHERE qot_sec_id = pay_sec_id 
       AND pay.pay_date = dpr_ts 
       AND rownum = 1),0) dividend 
    FROM dpr_mm, qot 
WHERE qot_id = dpr_qot_id 
     AND qot_id = 2027314299; 

回答

3
var query 
= from dpr in ctx.DPR_MM 
    join qot in ctx.QOT on dpr.DPR_QOT_ID equals qot.QOT_ID 
    join pay in ctx.PAY on new { p1 = (decimal) qot.QOT_SEC_ID, p2 = dpr.DPR_TS } 
    equals new { p1 = (decimal)pay.PAY_SEC_ID , p2 = pay.PAY_DATE } 
    into ps 
    from pay in ps.DefaultIfEmpty() 
    where qot.QOT_ID == 2027314299 
    select new 
    { 
     dpr.DPR_TS, 
     dpr.DPR_CLOSE, 
     pay_dividend = pay.PAY_DIVIDEND == null ? 0 : pay.PAY_DIVIDEND 
    }; 
+0

尚未。這不是我想要的。它返回內部連接。我需要先從dpr_mm +中獲得所有來自付款的條目。 – MaMu

+1

哪個連接應該是左連接?薪酬或qot加入?如果你可以更新你的問題與每個字段來自哪個表的指標,這將有助於 –

+0

嗯,上述問題中的sql查詢給了我我想要的東西......!從支付的dpr_mm + 1條目中輸入(或者如果該日期沒有條目(與dpr_mm.dpr_ts相匹配)存在,則爲0)。您的查詢將返回從dpr_mm的1入門和僅在有時間戳匹配的地方支付1。所以我錯過了dpr_mm的很多條目。 – MaMu