【问题标题】:Breeze Predicate in sub query子查询中的微风谓词
【发布时间】:2017-11-08 17:30:14
【问题描述】:

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

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

我正在为 Alphas 构建一个谓词。

例如

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

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

例如

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

我知道我可以通过以下方式构造谓词:

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

我的问题是我不知道那个谓词可能是什么。我不能只预先添加'myAlpha.',因为它可能包含诸如'concat('somefield', 'someotherfield')' 之类的OData 函数。

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

对我来说,IN 接受允许这种情况发生的谓词是有意义的......我看不到接受谓词的源代码,所以我想不出还有什么办法让这种情况发生......

【问题讨论】:

    标签: breeze predicate


    【解决方案1】:

    假设Alpha 有一个属性betas,您可以使用谓词查询Alpha,并使用expand 查询Beta,以便它们也被引入。然后在一个列表中收集您需要的 Beta:

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

    【讨论】:

    • 是的,我确实想到了这一点,实际上是我使用的解决方法,它只是在我的架构框架中带来了自身的局限性。
    猜你喜欢
    • 2014-12-19
    • 1970-01-01
    • 2013-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-17
    • 1970-01-01
    相关资源
    最近更新 更多