Добавление предложения "Или" на сервере для запроса Breeze
Поэтому мы хотим иметь возможность искать человека по номеру телефона. Из этого поста SO я узнаю, что добавление предложения where через свойство навигации, являющееся списком, пока не работает на одном дыхании.
Это нормально для меня, потому что breeze предоставляет замечательный способ настройки свойств на стороне сервера. Однако, когда я пишу свой запрос на сервере, мне нужно добавить дополнительное предложение where как "ИЛИ" в запрос, чтобы оно не мешало предложениям where, которые у меня уже есть на клиенте. Я делаю это на сервере, но он не работает. (Обратите внимание, что это использует DevForce Predicate Builder):
var pred = PredicateBuilder.False<Person>();
pred.Or(x => x.PhoneNumbers.Any(y => y.Value.StartsWith(searchString)));
var qry = _contextProvider.Context.People.Where(pred);
Я неправильно строю предикат, или то, что я делаю, добавляется в качестве и в предложении "И" и, таким образом, мешает другим предложениям where от клиента?
1 ответ
Обновлено сообщение: 25.11.13
Начиная с версии 1.4.6, теперь поддерживаются операторы "любой" и "все".
Таким образом, ваш запрос Breeze на стороне клиента будет выглядеть примерно так:
var query = EntityQuery.from("People").where("PhoneNumbers", "any", "Value", "startsWith", searchString);
Это предполагает, что у вас есть конечная точка "Люди", которая возвращает объект персоны, который имеет свойство "PhoneNumbers", которое, в свою очередь, имеет свое собственное свойство "Значение".
Также смотрите: http://www.breezejs.com/documentation/query-examples
Предыдущая запись
Breeze поддерживает предикаты or'ing вместе, как в:
var pred = Predicate.create("ShipCity", "stArtsWiTH", "F")
.or("ShipCity", "startswith", "C");
var q = EntityQuery.from("Orders").where(pred);
Бриз еще не поддерживает операторы "any" и "all". Хотя они будут поддерживаться в ближайшее время.