2014-10-23 6 views
0

У меня есть запрос на бриз, который игнорирует предикат при запросе с сервера. Все данные возвращаются. После этого, если я включаю тот же предикат и запрос локально, применяются предикаты. Это нормально? мой предикат и запрос выглядитBreeze Predicate не работает при запросе serveride

вар предикат = breeze.Predicate ("активными", "==", ложь) вара запрос = новый EntityQuery ("Todos"), где (предикат).

URL-адрес отправляется на сервер выглядит как http://localhost:8888/Items/GetItems?$filter=active%20eq%20false

и метод выглядит

[HttpGet] 
public IQuerable<Items> GetItems() { 
    return contextprovider.context.Items(); 
} 

Можно фильтровать непосредственно с сервера и не загружая все и фильтровать локально?

ответ

1

Мне не хватает тега [BreezeController] на моем контроллере.

1

Это IS фильтрация непосредственно на сервере. Предложение «active = false» объединяется с IQueryable на стороне сервера до того, как оно будет выполнено с использованием хранилища данных на стороне сервера. До тех пор, пока хранилище данных понимает, как обрабатывать IQueryable (как это делает EF), вся фильтрация происходит на сервере в контексте «комбинированного» запроса. Все, что вы действительно делаете, это передать условия фильтрации серверу, который сервер будет выполнять в сочетании с именованной конечной точкой. Таким образом, запрос, который выполняется на сервере фактически

contextProvider.context.Items().Where(item => item.active = false); 

Кроме того, вы всегда можете избежать «прохождения» в условиях фильтра, просто изменив реализации конечной точки сервера, чтобы выполнить фильтрацию явно т.е.

[HttpGet] 
public IQuerable<Items> GetItems() { 
    return contextprovider.context.Items().Where(item => item.active = false); 
} 

В обоих случаях будет выполнен точно такой же запрос.