解析字符串以在微风中谓词

时间:2013-08-09 15:40:46

标签: javascript parsing serialization breeze

这个

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操作符和相同的解析添加具有该逻辑单词的下一个谓词。

1 个答案:

答案 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);