2017-10-10 5 views
0

Ich habe zwei Einheiten, nennen wir sie Alpha und Beta.Breeze Prädikat in Sub-Abfrage

Es gibt eine Eins-zu-viele-Beziehung zwischen ihnen, so dass Beta einen Fremdschlüssel zu Alpha, MyAlphaId, und somit eine Referenzeigenschaft MyAlpha hat.

Ich habe ein Prädikat für Alphas gebaut.

z.B.

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

Ich möchte dann „transponieren“ dies auf eine Abfrage für Beta, wo seine myAlpha Eigenschaft dieses Prädikat übereinstimmt.

z.B.

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

Ich bin von der Fähigkeit, für mich bewusst das Prädikat in der folgenden Weise zu konstruieren:

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

Mein Problem ist, dass ich weiß nicht, was das Prädikat sein kann. Ich kann nicht einfach 'myAlpha.' voranstellen, da es eine OData-Funktion wie 'concat('somefield', 'someotherfield')' enthalten kann.

Irgendwelche anderen Gedanken oder Vorschläge, wie ich das erreichen kann?

Für mich würde es Sinn machen, wenn IN ein Prädikat akzeptiert, das dies erlaubt ... Ich kann nicht sehen, dass der Quellcode ein Prädikat akzeptiert, also kann ich nicht darüber nachdenken, wie ich das sonst noch machen könnte.

Antwort

0

Angenommen, dass Alpha eine Eigenschaft betas hat, könnten Sie Alphas mit dem Prädikat und expand die Betas abfragen, so dass sie auch hereingebracht werden. Dann sammelt die Betas, wenn man sich in einer einzigen Liste benötigen:

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

Ja, die meinen Verstand überqueren haben und in der Tat ist die Arbeit um, die ich verwenden, bringt es nur seine eigenen Grenzen in meinem Architektur-Framework. –