因此,我们希望能够通过电话号码搜索某个人。从this SO帖子我收集到,通过导航属性添加一个where子句是一个列表在微风中不起作用。
这对我来说没关系,因为breeze提供了一种很棒的方式server side properties。但是,当我在服务器上编写查询时,我需要将额外的where子句作为“OR”添加到查询中,这样就不会干扰我已经在客户端上的where子句。我在服务器上这样做,但它不工作。 (注意这是使用DevForce Predicate Builder):
var pred = PredicateBuilder.False<Person>();
pred.Or(x => x.PhoneNumbers.Any(y => y.Value.StartsWith(searchString)));
var qry = _contextProvider.Context.People.Where(pred);
我是否构建了错误的谓词,或者我正在做什么被添加为“和”条款,从而干扰了我在客户端的其他条款?
答案 0 :(得分:2)
从Breeze 1.4.6开始,现在支持“任何”和“所有”运算符。
所以你的客户端Breeze查询看起来像:
var query = EntityQuery.from("People").where("PhoneNumbers", "any", "Value", "startsWith", searchString);
这假设您有一个“People”端点,它返回一个具有“PhoneNumbers”属性的person对象,该属性又具有自己的“Value”属性。
另见:http://www.breezejs.com/documentation/query-examples
Breeze确实支持或联合谓词,如:
var pred = Predicate.create("ShipCity", "stArtsWiTH", "F")
.or("ShipCity", "startswith", "C");
var q = EntityQuery.from("Orders").where(pred);
尚未支持的是“任何”和“所有”运营商。虽然这些将在不久的将来得到支持。