2013-09-20 5 views
8

Можно указать в предложении where, что я хочу, чтобы данные со значением столбца равны некоторым значениям из массива?BreezeJS "WHERE value IN array"

Например:

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

Или как еще я должен сделать это эффективно, так как таблица имеет много записей об этом, это не будет эффективным, чтобы получить все из них? Является ли это эффективным, если я делаю это один за другим?

ответ

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% правильно, но должен показать вам, что нужно делать - создавать предикаты динамически и добавить их к общему предиката, а затем в запросе.

+0

Я сделал это работать, но, видимо, я не могу использовать его, потому что он строит запросы HTTP, которые слишком долго ... Спасибо за совет, хотя! – razvanz

16

Использование Бриз Новый JSON query feature введен в 1.5.1, вы можете создать «WHERE значение в массиве» положение, как это:

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

Не много пользы для меня после почти 1,5 лет, но надеюсь, что это поможет любому, кого это интересует. Благодарю. – razvanz

+0

Есть ли способ не делать этого? – kdelmonte

+2

Вы можете сделать это, обернув предложение where с помощью нет. Итак, в приведенном выше примере вы просто завернете '' DepartmentID ': {in: [3,5,6]} 'быть' not: {' DepartmentID ': {in: [3,5,6]}} ' –

2

Немного опоздал на вечеринку, но мне нужно было то же самое, как смог чтобы сделать это следующим образом:

общественных getFeaturedRestaurants (restaurantIds: число []) { 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); 

}