2013-10-04 6 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 записи из платежа (или 0, если не существует записи с этой датой (которая соответствует dpr_mm.dpr_ts)). Ваш запрос возвращает мне 1entry от dpr_mm и 1 от оплаты только там, где есть совпадение с меткой времени. Поэтому я пропускаю много записей от dpr_mm. – MaMu

Смежные вопросы