如何在Breeze FilterQueryOp类中使用“IN”运算符?

时间:2014-07-29 09:21:04

标签: filtering breeze predicate

是否可以使用" IN"运算符与Breeze.js的FilterQueryOp类?我希望能够通过检查ID是否在数组中进行过滤。在Mysql中它将是一个简单的

SELECT * FROM a_table WHERE fieldname IN ('array1', 'array2', 'array3')

但我无法通过微风找到一种简单的方法吗?

2 个答案:

答案 0 :(得分:1)

没有实际的'IN'运算符,但您可以通过'或'将几个breeze谓词放在一起并将复合谓词传递给 EntityQuery.where 方法来轻松完成相同的操作。 所以,如果你从

开始
var Predicate = breeze.Predicate;
var p1 = Predicate.create('fieldName', '==', 'array1');
var p2 = Predicate.create('fieldName', '==', 'array2');
var p3 = Predicate.create('fieldName', '==', 'array3');

然后给出这3个谓词你或者'他们在一起就像这样:

var newPred = Predicate.or(p1, p2, p3);

var newPred = p1.or(p2, p3);

var preds = [p2, p3];
var newPred = p1.or(preds);

或通过更流畅的方法:

var newPred = Predicate.create("fieldName", "==", "array1")
                            or("fieldName", "==", "array2")
                           .or("fieldName", "==", "array3")    

显然,你也可以创建自己的javascript函数来为你执行这个组合。

无论如何,一旦你有了复合谓词,你就可以编写如下内容:

var myQuery = breeze.EntityQuery.from("a_table").where(newPred);

答案 1 :(得分:1)

现在看来有一个IN filterQueryOp可用:

http://breeze.github.io/doc-js/api-docs/classes/FilterQueryOp.html#property_In

我认为这可以通过对一组谓词进行OR运算来实现Jay的原始解决方法?在那种情况下,在服务器端OR的周长出现故障之前,可以使用IN的标准数量的实际限制是多少?