这个
new breeze.Predicate('user', breeze.FilterQueryOp.Contains, 'a')
.and('foo', breeze.FilterQueryOp.GreaterThan, 'bar')
.or('also', breeze.FilterQueryOp.StartsWith, 'value')
.toString()
返回
"(({user} substringof {a}) and ({foo} gt {bar})) or ({also} startswith {value})"
如何从这个字符串创建breeze.Predicate?最简单的方法是什么?
可以使用
简单地创建一个谓词var predArgs = ["Freight", "gt", 100];
var p1 = Predicate.create(predArgs);
在breeze谓词中只有“and”,“not”和“or”逻辑词
几乎解决方法是删除所有圆括号,然后用逻辑单词分开。在那之后取第一个谓词如“{user} substringof {a}”并将其解析为[“user”,“substringof”,“a”]并创建谓词。然后,对于每个逻辑单词,通过switch操作符和相同的解析添加具有该逻辑单词的下一个谓词。
答案 0 :(得分:1)
你几乎拥有它。只需删除 toString()即可。或者,您可以使用 Predicate.create 。
var predicate = breeze.Predicate.create('user', breeze.FilterQueryOp.Contains, 'a')
.and('foo', breeze.FilterQueryOp.GreaterThan, 'bar')
.or('also', breeze.FilterQueryOp.StartsWith, 'value');
EntityQuery.where 子句直接获取谓词,即
var query = EntityQuery.from("Foo").where(predicate);