0

我有一个包含 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 谓词之前,一切正常。

任何帮助将不胜感激。

4

1 回答 1

1

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

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

较早的帖子

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

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

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

但我们不能这样做

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

因为 orders.freightCost 在概念上是一组运费成本。

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

一旦我们将它放入 Breeze 中,您的查询谓词将看起来像这样(我们仍在研究正确的语法)。

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

或者

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

所以请在 UserVoice 上为这个功能投票。在确定下一步要开发哪些功能时,我们会认真听取社区的意见。

于 2013-11-14T20:19:08.090 回答