【问题标题】:Breeze Predicate not working when querying serverside查询服务器端时微风谓词不起作用
【发布时间】:2014-12-19 02:27:05
【问题描述】:
我有一个轻而易举的查询,当从服务器查询时忽略谓词。返回所有数据。之后,如果我在本地包含相同的谓词和查询,则应用谓词。这是正常的吗?
我的谓词和查询看起来像
var 谓词 = 微风。谓词(“活动”,“==”,假)
var query = new EntityQuery("Todos").where(predicate);
发送到服务器的 URL 看起来像 http://localhost:8888/Items/GetItems?$filter=active%20eq%20false
方法看起来像
[HttpGet]
public IQuerable<Items> GetItems() {
return contextprovider.context.Items();
}
是否可以直接从服务器过滤而不必在本地加载和过滤?
【问题讨论】:
标签:
breeze
server-side
entitymanager
predicate
hottowel
【解决方案1】:
这是直接在服务器上过滤。 '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);
}
在这两种情况下,将执行完全相同的查询。
【解决方案2】:
我的控制器上缺少[BreezeController]标签。