Breeze.js传递谓词Odata Url

Breeze.js传递谓词Odata Url,breeze,predicate,predicatebuilder,Breeze,Predicate,Predicatebuilder,我正在尝试使用以下链接中的文档创建一个包含多个breeze.js passthrough谓词的ODataURL: 但是,生成的url与odata url完全不同,例如: var query = breeze.EntityQuery.from('User').using(this.manager).where("{ { 'userName': { '=': '123456' } } }"); var url = query._toUri(this.manager); url是“用户?$filte

我正在尝试使用以下链接中的文档创建一个包含多个breeze.js passthrough谓词的ODataURL:

但是,生成的url与odata url完全不同,例如:

var query = breeze.EntityQuery.from('User').using(this.manager).where("{ { 'userName': { '=': '123456' } } }");
var url = query._toUri(this.manager);

url是
“用户?$filter=%7B%20%7B%20”用户名“%3A%20%7B%20”%3D'%3A%20'123456'%20%7D%20%7D&$orderby=userName”
,而不是
“用户?$filter=(userName eq'123456')&$orderby=userName”
,我认为您不需要传递查询,因为它只是完整地传递where子句,而没有任何处理。这就是引用整个where子句时发生的情况

如果要将查询转换为“odata”语法,请尝试以下操作:

var query = breeze.EntityQuery.from('Customers').using(em)
     .where({ 'userName': { '==': '123456' } });
请注意,'where'参数不在引号中(它是一个标准的javascript对象),运算符为'=',而不是'='

甚至更简单

var query = breeze.EntityQuery.from('Customers').using(em)
     .where( { userName: '123456' });
进一步资料: 任何查询都可以生成两种形式的URL。OData表单和JSON表单。如果您想要OData(默认值),那么您要么什么也不做,因为它是默认值,要么您可以使用以下命令明确告诉breeze:

breeze.core.config.initializeAdapterInstance("uriBuilder", "odata");
如果需要json表单,可以使用

breeze.core.config.initializeAdapterInstance("uriBuilder", "json");
您还可能添加了一行以使用“json”uriBuilder。如果需要ODataURL,请省略这一行。您仍然可以通过json语法构造查询,但URL将使用OData语法输出

Json格式(或uri)对于非OData服务器很有用