9

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

例如:

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

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

4

3 回答 3

17

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

var jsonQuery = {
    from: 'Customers',
    where: {
        'DepartmentID': { in: [3,5,6] }
    }
}
var query = new EntityQuery(jsonQuery);
于 2015-03-09T16:07:26.107 回答
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% 正确运行,但应该向您展示该怎么做 - 动态创建谓词并将它们添加到总谓词中,然后添加到查询中。

于 2013-09-20T18:47:06.360 回答
4

派对有点晚了,但我需要和能够做到这一点一样的东西:

公共 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);

}

于 2016-12-19T22:21:20.070 回答