我有一个包含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谓词。
非常感谢任何帮助。
答案 0 :(得分:1)
从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上投票支持此功能。我们认真对待社区的声音,以确定下一步要使用哪些功能。