1

这个

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})"

如何从这个字符串创建微风。谓词?最简单的方法是什么?

可以使用简单地创建一个谓词

var predArgs = ["Freight", "gt", 100];
var p1 = Predicate.create(predArgs);

在微风谓词中只有“and”、“not”和“or”逻辑词

几乎解决方案是删除所有圆括号,然后用逻辑词分隔。之后获取第一个谓词,如“{user} substringof {a}”并将其解析为 [“user”、“substringof”、“a”] 并创建谓词。然后对于每个逻辑词,通过 switch 运算符和相同的解析添加带有该逻辑词的下一个谓词。

4

1 回答 1

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);
于 2013-08-09T16:49:16.080 回答