我正在使用 Breeze 过滤客户端请求的数据。我的代码看起来有点像这样:
客户端 - 创建过滤谓词
var predicates = [];
var criteriaPredicate = null;
$.each(selectedFilterCriteria(), function (index, item) {
criteriaPredicate = (index == 0)
? breeze.Predicate.create('criteriaId', breeze.FilterQueryOp.Equals, item)
: criteriaPredicate.or('criteriaId', breeze.FilterQueryOp.Equals, item);
if (breeze.Predicate.isPredicate(criteriaPredicate)) {
predicates.push(criteriaPredicate);
}
// Repeat for X Filter Criteria
var filter = breeze.Predicate.and(predicates);
return context.getAll(filter, data);
客户端 - 上下文查询
function getAll(predicate, dataObservable) {
var query = breeze.EntityQuery.from('Data');
if (breeze.Predicate.isPredicate(predicate)) {
query = query.where(predicate);
}
return manager.executeQuery(query).then(success).fail(failure);
}
问题
我的请求有问题,因为如果没有设置过滤器,我会应用一个“空”谓词(由于该var filter = breeze.Predicate.and([])
行),从而产生类似http://mysite/api/app/Data?$filter=
. 该请求是无效的 OData 查询,因为 $filter 参数的值不能为空。
有什么好方法可以让我检查一个空谓词吗?我知道我可以重构我的客户端代码以不使用谓词,除非至少有一个可过滤的项目,但我想我会先检查一下我是否忽略了 Breeze 谓词上的某些属性或方法。