/ / OUTER APPLY n'est pas pris en charge dans cette requête LINQ - c #, oracle, linq

OUTER APPLY n'est pas pris en charge dans cette requête LINQ - c #, oracle, linq

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 № 1

OUTER 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.