查询服务器端时Breeze谓词不工作
我有一个breeze查询,它在从服务器进行查询时忽略谓词。返回所有数据。然后,如果我在本地包含相同的谓词和查询,则会应用谓词。这正常吗? 我的谓词和查询看起来像 变量谓词=breeze.predicate(“活动的”,“==”,false) var query=newentityquery(“Todos”)。其中(谓词) 发送到服务器的URL看起来像查询服务器端时Breeze谓词不工作,breeze,server-side,entitymanager,predicate,hottowel,Breeze,Server Side,Entitymanager,Predicate,Hottowel,我有一个breeze查询,它在从服务器进行查询时忽略谓词。返回所有数据。然后,如果我在本地包含相同的谓词和查询,则会应用谓词。这正常吗? 我的谓词和查询看起来像 变量谓词=breeze.predicate(“活动的”,“==”,false) var query=newentityquery(“Todos”)。其中(谓词) 发送到服务器的URL看起来像http://localhost:8888/Items/GetItems?$filter=active%20eq%20false 这个方法看起来像
http://localhost:8888/Items/GetItems?$filter=active%20eq%20false
这个方法看起来像
[HttpGet]
public IQuerable<Items> GetItems() {
return contextprovider.context.Items();
}
[HttpGet]
公共可查询的GetItems(){
返回contextprovider.context.Items();
}
是否可以直接从服务器进行筛选,而不必加载全部并在本地进行筛选?这是直接在服务器上进行筛选。在对服务器端数据存储执行“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);
}
[HttpGet]
公共可查询的GetItems(){
返回contextprovider.context.Items(),其中(item=>item.active=false);
}
在这两种情况下,将执行完全相同的查询 我的控制器上缺少
[BreezeController]
标记