URI中指定的Breeze查询无效

时间:2013-11-14 19:11:50

标签: breeze

我有一个包含Sessions,Clinicians和连接器表CliniciansInSessions的数据库。我正在尝试添加谓词以搜索具有临床医生姓名的会话。 EntityNames是Sessions_Sessions - > Sessions_CliniciansInSessions - > Sessions_Clinicians。

我试图弄清楚为什么这个谓词:

 var p5 = new breeze.Predicate("Sessions_CliniciansInSessions.Sessions_Clinicians.LastName", "contains", "Pras")

导致此错误:

 {
    $id: "1",
    $type: "System.Web.Http.HttpError, System.Web.Http",
    Message: "The query specified in the URI is not valid."
 }

这是整个功能:

var loadSessions = function () {
                var p1 = new breeze.Predicate("FormatID", "!=", "11");
                var p2 = new breeze.Predicate("Year", "==", "2014");
                var p3 = new breeze.Predicate("Approved", "==", "true");
                var p4 = new breeze.Predicate("Sessions_Rooms.Room", "contains", "Ballroom")
                var p5 = new breeze.Predicate("Sessions_CliniciansInSessions.Sessions_Clinicians.LastName", "contains", "Pras")//<--Problem Predicate: invaild query Uri
                //var p5 = new breeze.Predicate("Sessions_Clinicians.LastName", "contains", "Pras") //<--Can't find property Sessions_Sessions error
                var predicates = breeze.Predicate.and([p1, p2, p3, p4, p5]);

                var query = breeze.EntityQuery.from("Sessions_Sessions")
                    .where(predicates)
                    .orderBy('StartTime, Title');

                return my.manager.executeQuery(query).then(querySucceeded).fail(queryFailed);

                function querySucceeded(data) {
                    my.vm.sessions(data.results);
                };
                function queryFailed(error) {
                    $("#error").append(error.message);
                };
            };

以下是整个页面:

https://github.com/joshbula/LearningBreeze3/blob/master/LearningBreeze3/index.html

Session_Rooms谓词似乎工作正常,所以我想知道是否存在导致问题的多子事件?一切都在工作,直到我添加了p5谓词。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

更新后的帖子:2013年11月25日

从Breeze 1.4.6开始,现在支持“任何”和“所有”运算符。

旧帖子

Breeze谓词目前仅适用于标量属性。换句话说,您可以按客户过滤订单,即通过order.customer属性,因为订单只有一个客户,但您无法通过客户订单过滤客户订单,因为订单上可能有多个订单顾客。

这意味着今天我们可以这样:

EntityQuery.from("Orders").where("customer.name", "==", "smith");

但我们不能这样做

EntityQuery.from("Customer").where("orders.freightCost", ">" , 100);

因为orders.freightCost在概念上是一系列运费。

这就是UserVoice请求支持任何和所有运营商的原因:Support any and all operators

一旦我们将其变为Breeze,您的查询谓词将看起来像这样(我们仍在为此制定正确的语法)。

EntityQuery.from("Customer").where("orders.any(freightCost)", ">", 100);

EntityQuery.from("Customer").where("orders.all(freightCost)", ">", 100);

因此,请在UserVoice上投票支持此功能。我们认真对待社区的声音,以确定下一步要使用哪些功能。