【问题标题】: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]标签。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多