BreezeJS“WHERE值IN数组”

时间:2013-09-20 13:51:06

标签: breeze

可以在where子句中指定我希望列值等于数组中某些值的数据吗?

例如:

EntityQuery.from('Customers')
.where('DepartmentID','in','[3,5,6]');

或者我应该如何有效地做到这一点,因为该表有很多条目,检索所有条目效率不高?如果我一个接一个地做它会有效吗?

3 个答案:

答案 0 :(得分:16)

使用1.5.1中引入的Breeze的新JSON query feature,您可以创建一个“WHERE value IN array”子句,如下所示:

var jsonQuery = {
    from: 'Customers',
    where: {
        'DepartmentID': { in: [3,5,6] }
    }
}
var query = new EntityQuery(jsonQuery);

答案 1 :(得分:5)

只需添加多个谓词 -

var myArray = [3, 4, 5];
var predicate = new Breeze.Predicate;

var query = EntityQuery.from('Customers');

if (myArray) {
    var criteriaPredicate = null;
    $.each(myArray, function (index, item) {
        criteriaPredicate = (index === 0)
            ? Predicate.create('DepartmentId', '==', item)
            : criteriaPredicate.or('DepartmentId', '==', item);
        if (Predicate.isPredicate(criteriaPredicate)) {
            predicate = predicate.or(criteriaPredicate);
        }
    });
}

query = query.where(predicate);

这可能无法100%正确运行,但应该告诉您该做什么 - 动态创建谓词并将它们添加到总谓词然后再添加到查询中。

答案 2 :(得分:2)

派对有点晚了,但我需要像以前那样做的事情:

public getFeaturedRestaurants(restaurantIds:number []){     this.dataBreezeService.initialiseQuery(' getFeaturedRestaurants',[restaurantIds]);

let query = new EntityQuery()
    .from('restaurants')
    .where("restaurantId", "in", restaurantIds)
    .toType('Restaurant')
    .expand('foodType, suburb.city')

return this.dataBreezeService.executeQueryCacheOrServerForList(query, false);

}