2016-09-08 5 views
0

Ich habe diese Linq: -ORA-00904 ungültige Kennung auf generierte Abfrage von Linq

var query = from r in Ctx.Reg 
      select new 
      { 
       IdReg = r.Id, 
       ... 
       Status1 = r.Hist.OrderByDescending(o => o.Id).Take(1).Any(x=> x.Status == 2), 
       Status2 = r.Hist.OrderByDescending(o => o.Id).Skip(1).Take(1).Any(x=> x.Status == 5) 
      }; 

Die erzeugte Abfrage enthält:

WHERE ("Extent1"."REP_ID" = "Extent2"."REP_ID") 

Ich erhalte die Nachricht

ORA-00904: "Ausdehnung1". "REP_ID".

Beide Spalten existieren und haben den gleichen Datentyp. Was kann ich für dieses Problem tun?

+1

nicht klar, ohne die all Oracle-Abfrage (auch wenn es groß ist). Übrigens, warum benutzt du nicht 'r.Hist.Any()' und 'r.Hist.Count()> 1' anstelle von take/skip/any für status1 und status2? –

+0

Ich habe eine Klausel, die ich vergessen habe, im Any() -Satz zu schreiben, so: Any (x => x.Status == 2); –

+0

@LennonFerreira Vielleicht könnten Sie die 'Hist'-Elemente in der Abfrage zurückgeben und dann diese Logik in Linq-to-Objects ausführen. – juharr

Antwort

0

Ich weiß nicht genau warum, aber es funktioniert:

var query = from r in Ctx.Reg 
      select new 
      { 
       IdReg = r.Id, 
       ... 
       Status1 = Ctx.RegHist.OrderByDescending(o => o.Id).Any(x=> x.RegId == r.Id && x.Status == 2), 
       Status2 = Ctx.RegHist.OrderByDescending(o => o.Id).Skip(1).Any(x=> x.RegId == r.Id && x.Status == 5) 
      };