子查询中的Breeze Predicate

时间:2017-10-10 06:39:31

标签: breeze predicate

我有两个实体,我们称之为Alpha和Beta。

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

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

e.g。

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

我希望然后将其“转置”到Beta的查询中,其myAlpha属性与该谓词匹配。

e.g。

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

我知道能够以下列方式构造谓词:

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

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

关于如何实现这一目标的任何其他想法或建议?

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

1 个答案:

答案 0 :(得分:0)

假设Alpha具有属性betas,您可以使用谓词查询Alpha,并使用expand Betas查询它们,以便它们也被引入。如果您需要Betas,请在单个列表中收集Betas:

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