1

所以我们希望能够通过电话号码搜索一个人。从这篇SO 帖子中,我收集到通过作为列表的导航属性添加 where 子句还不能轻而易举地工作。

这对我来说没问题,因为微风提供了一种很棒的方式来处理服务器端属性。但是,当我在服务器上编写查询时,我需要将额外的 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);

我是在构建谓词错误还是我正在做的事情被添加为“和”子句,从而干扰了来自客户端的其他 where 子句?

4

1 回答 1

2

更新后的帖子:2013 年 11 月 25 日

从 Breeze 1.4.6 开始,现在支持“任何”和“所有”运算符。

所以你的客户端微风查询看起来像:

var query = EntityQuery.from("People").where("PhoneNumbers", "any", "Value", "startsWith", searchString);

这假设您有一个“People”端点,该端点返回一个具有“PhoneNumbers”属性的人对象,该属性又具有自己的“Value”属性。

另见:http ://www.breezejs.com/documentation/query-examples

较早的帖子

Breeze 确实支持 or'ing 谓词,如下所示:

 var pred = Predicate.create("ShipCity", "stArtsWiTH", "F")
                         .or("ShipCity", "startswith", "C");
 var q = EntityQuery.from("Orders").where(pred);

微风尚不支持的是“任何”和“所有”运算符。尽管这些将在不久的将来得到支持。

于 2013-02-07T20:19:56.513 回答