J'ai besoin d'exécuter cette requête dans une base de données Oracle 11.2, mais la requête générée contient une "APPLICATION EXTERNE". Comment puis-je le résoudre ?
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
};
Réponses:
0 pour la réponse № 1OUTER APPLY
est généré par votre let
expressions d'instructions. Vous pouvez l'éviter en les transformant en EXISTS
expressions traduisibles utilisant l'équivalent Any
constructions LINQ basées:
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
};
Notez que h.RegId == r.Id
n'est pas nécessaire car cela est sous-entendu par r.Hist
propriété de navigation.