如何在轻而易举的扩展实体上使用谓词



假设我有一个名为Foo的实体,它有一个Bars列表。 Bars还包含一个名为 isDeleted 的字段,该字段指示特定栏已被软删除。我希望能够查询特定的Foo并使用 Breeze 过滤掉在 Javascript 文件中软删除的Bars。我以为这会起作用...

var query = breeze.EntityQuery.from('Foo')
        .where('Id', '==', id).and('Bars.IsDeleted', '==', false)
        .expand('Bars');

但是它没有,有人可以告诉我如何在轻而易举的情况下做到这一点吗?如果唯一的解决方案是在BreezeController中编写方法并使用标准 LINQ 语法,那么我对此很好,但我只想先看看它是否会在 Breeze中工作。

目前,Breeze不支持过滤"扩展"。 即仅返回满足特定条件的"扩展"实体。 这是因为很少有后端服务器和持久性库提供支持此功能的机制。

但是,您可以做的是反转查询以获取所需的内容。

var query = breeze.EntityQuery.from('Bars').expand('Foo')
    .where(new breeze.Predicate('Foo.Id', 'eq', id)
                 .and('IsDeleted', 'eq', false));

这假定每个"Bar"实体都有一个标量"Foo"属性。

这将只返回您想要的每个"条形图"及其关联的"Foo"实体。这是有效的,因为 Breeze 允许嵌套标量谓词。即"Foo.Id"。

查询

上的多个.where()链将自动"AND"在一起。 如果你想做这个明确,你需要使用微风。谓词对象作为您的 where 参数,如下所示:

var query = breeze.EntityQuery.from('Foo').expand('Bars')
    .where(new breeze.Predicate('Id', 'eq', id)
                     .and('Bars.IsDeleted', 'eq', false));

您还可以选择在Predicate对象上使用.or或任何其他方法,其中大多数方法都可以正确链接。

编辑:以下是使用多个.where调用的示例:

    var query = breeze.EntityQuery.from('Foo').expand('Bars')
                .where('Id', 'eq', id)
                .where('Bars.IsDeleted', 'eq', false);

最新更新