2016-09-06 5 views
1

이 쿼리는 Oracle 11.2 데이터베이스에서 실행해야하지만 생성 된 쿼리에는 "OUTER APPLY"가 포함되어 있습니다. 어떻게 해결할 수 있습니까?OUTER APPLY가이 LINQ 쿼리에서 지원되지 않습니다.

var query = from r in Ctx.Reg 
    let status_1 = (r.Hist.OrderByDescending(o => o.Id).FirstOrDefault(h => h.RegId == r.Id).Status == 1) 
    let status_2 = (r.Hist.OrderByDescending(o => o.Id).Skip(1).FirstOrDefault(h => h.RegId == r.Id).Status == 2) 
    select new 
    { 
     r.Id, 
     ... 
     status_1, 
     status_2 
    }; 

답변

0

OUTER APPLYlet 문 표현식에 의해 생성됩니다. 당신은 해당 Any 기반 LINQ 구조를 사용하여 EXISTS 번역 표현으로 그들을 돌려 그것을 피할 수

var query = from r in Ctx.Reg 
    let status_1 = r.Hist.OrderByDescending(h => h.Id).Take(1).Any(h => h.Status == 1) 
    let status_2 = r.Hist.OrderByDescending(h => h.Id).Skip(1).Take(1).Any(h => h.Status == 2) 
    select new 
    { 
     r.Id, 
     ... 
     status_1, 
     status_2 
    }; 

주 그 r.Hist 탐색 속성에 의해 암시하기 때문에 h.RegId == r.Id가 필요하지 않은 것이다.

관련 문제