BreezeJS - 如何编写复杂的查询?

时间:2012-12-12 11:41:33

标签: typescript breeze jaydata

如何使用BreezeJS + OData或WebAPI编写复杂查询?我希望能够在JayData中使用Northwind作为参考db吗?我的问题是我不知道如何表达同时引用数据库(不是与常量相比较的字段)的查询以及具有复杂逻辑树(a ||(b&& c))的查询? / p>

context.Products.filter(function(product) {
   return (product.Unit_Price < product.Category.BudgetPriceLimit) || 
   (product.Category.IsOnSale && product.Supplier.IsFavored)
}).toArray(...)

我的另一个问题是关于TypeScript +查询。如何使用箭头函数进行BreezeJS查询?因此,没有表达构建器可以说:

query(Product => Product.Unit_Price < Product.Category.BudgetPriceLimit)

感谢您的帮助,对不起,如果这些是明显的问题。

2 个答案:

答案 0 :(得分:6)

此帖子已经过编辑,以纠正我的错误以及自v 0. 77.1以来添加到微风中的新功能。

好问题!

Breeze现在支持跨属性查询表达式(截至v 0.77.1),如下所示:

var shippedLateQuery = EntityQuery.from("Orders")
                                  .where("requiredDate",">","shippedDate");

第三个参数(上面的“shippedDate”)将被视为属性表达式或文字,具体取决于上下文。通常,如果值可以被解释为属性表达式,那么它将被视为文字。在大多数情况下,这种方法效果很好,但您也可以强制进行解释。有关详细信息,请参阅API文档。

通过Predicates完成复杂查询,即(a ||(b&amp; c)),微风。这里有一些很好的例子:

Query Examples - see the Compound Conditions with Predicates topics

此外,第一个微风教程:Tutorial还允许您试用这些功能(参见步骤5)。

我们正在积极关注Typescript并计划完全启用它,但我们仍处于早期阶段。

更新:自v 0.84.4起,Breeze提供完整的TypeScript支持。

答案 1 :(得分:0)

在Breeze支持字段到字段比较之前,您可以考虑在服务器端控制器上编写自定义查询方法,以构建可以进行字段到字段比较的LINQ查询。为了给客户端更多的灵活性,它可以传递控制器方法解释的参数以影响查询构造;使用 withParameters 子句。您可以组合OData查询子句和 withParameters 子句。