假设我有一个名为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);