2017-10-10 141 views
0

我有两个实体,我们称它们为Alpha和Beta。Breeze谓词子查询

它们之间存在一对多的关系,因此Beta具有Alpha的外键,MyAlphaId,因此参考属性MyAlpha

我有一个为Alphas构建的谓词。

例如

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

我想那么“转”这个到了测试版的地方其myAlpha属性,谓词匹配的查询。

例如

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

我知道的构建谓词以下列方式的能力,对我来说:

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

我的问题是,我不知道谓词可能是什么。我不能预先申请'myAlpha.',因为它可能包含OData函数,如'concat('somefield', 'someotherfield')'

有关我如何实现此目的的任何其他想法或建议?

对我来说,IN接受一个允许发生这种情况的谓词是有意义的......我看不到接受谓词的源代码,所以我想不出如何做到这一点..

回答

0

假设Alpha有一个属性betas,您可以使用谓词查询阿尔法,并使用BETA查询expand,以便它们也被引入。然后收集的贝塔系数,如果你需要他们在一个单独的列表:

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

是的,这并穿过我的脑海里,实际上是工作围绕我用过,只是带来了我的架构框架内其自身的局限性。 –