在查询服务器端时,Breeze Predicate无法正常工作

时间:2014-10-23 12:11:36

标签: breeze server-side entitymanager predicate hottowel

我有一个轻微的查询,当从服务器查询时忽略谓词。返回所有数据。之后,如果我在本地包含相同的谓词和查询,则应用谓词。这是正常的吗? 我的谓词和查询看起来像

  

var predicate = breeze.Predicate(“active”,“==”,false)   var query = new EntityQuery(“Todos”)。where(predicate);

发送到服务器的网址类似于http://localhost:8888/Items/GetItems?$filter=active%20eq%20false

,方法看起来像

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

是否可以直接从服务器过滤而不必加载所有并在本地过滤?

2 个答案:

答案 0 :(得分:1)

此IS直接在服务器上过滤。 &#39; active = false&#39;子句在服务器端数据存储区执行之前合并到服务器端IQueryable。因此,只要数据存储区了解如何处理IQueryable(如同EF所做的那样),所有过滤都发生在服务器上的“组合”的上下文中。查询。您所做的只是将过滤条件传递给服务器,服务器将与命名端点一起执行。因此,在服务器上执行的查询实际上是

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

或者你可以随时避免通过&#39;在过滤条件中,只需更改服务器端点实现即可明确执行过滤,即

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

在这两种情况下,都将执行完全相同的查询。

答案 1 :(得分:1)

我错过了控制器上的[BreezeController]标记。