2017-10-10 7 views
0

J'ai deux entités, appelons-les Alpha et Bêta.Breeze Prédicat dans la sous-requête

Il existe une relation un à plusieurs entre eux, de sorte que Beta a une clé étrangère à Alpha, MyAlphaId, et donc une propriété de référence MyAlpha.

J'ai un prédicat en cours de construction pour Alphas.

par exemple.

var predicateAlpha = new Predicate('name', 'contains', 'somevalue'); 

Je veux ensuite « transposer » ce sur une requête pour Beta de laquelle correspond à sa propriété myAlpha que prédicats.

par exemple.

var predicateBeta = new Predicate('myAlpha', 'in', predicateAlpha); 

Je suis conscient de la possibilité pour moi de construire le prédicat de la manière suivante:

var predicateBeta = new Predicate('myAlpha.name', 'contains', 'somevalue'); 

Mon problème est que je ne sais pas ce que prédicat peut être. Je ne peux pas juste pré-pend 'myAlpha.' car il peut inclure une fonction OData telle que 'concat('somefield', 'someotherfield')'.

Avez-vous d'autres idées ou suggestions sur la façon d'y parvenir? Pour moi, cela aurait du sens pour IN d'accepter un prédicat qui permette cela ... Je ne vois pas le code source acceptant un prédicat, donc je ne peux pas imaginer comment faire pour que cela se produise.

Répondre

0

En supposant que Alpha a une propriété betas, vous pouvez faire une requête pour Alphas en utilisant le prédicat, et expand le Betas afin qu'ils soient également introduits. Ensuite, recueillir les Bêtas si vous avez besoin dans une seule liste:

var query = em.createQuery(predicateAlpha).expand('betas'); 
var betas = []; 
em.executeQuery(query).then(queryResult => { 
    queryResult.results.forEach(alpha => { 
     betas = betas.concat(alpha.betas); 
    }); 
}); 
+0

Oui, qui ne traversé l'esprit et en fait est le travail autour que je, il apporte juste ses propres limites dans mon cadre d'architecture. –