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=
ます。$filter 引数の値を空にすることはできないため、リクエストは無効な OData クエリです。
空の述語を確認する良い方法はありますか? 少なくとも 1 つのフィルター可能な項目がない限り、クライアント コードをリファクタリングして述語を使用しないようにできることはわかっていますが、Breeze 述語のプロパティまたはメソッドを見落としていないかどうかを最初に確認することにしました。