有没有办法使用Breeze库形成像$ filter = Emails / any(s:s eq'somestring')的Odata过滤器?

时间:2015-07-19 15:19:55

标签: javascript odata breeze

例如,我有一个如下所示的模型结构:

{
"@odata.context": "serviceRoot/$metadata#People",
"@odata.nextLink": "serviceRoot/People?%24skiptoken=8",
"value": [
    {
        "@odata.id": "serviceRoot/People('russellwhyte')",
        "Emails": [ "Russell@example.com", "Russell@contoso.com" ]
    }, 
    ...
    ]
}

我想查询所有在他们的电子邮件列表中有“Russell@contoso.com”电子邮件的人。 (请注意,电子邮件是基本类型字符串的集合。)

在处理复杂对象的集合时,似乎Breeze只能做这样的事情:

var query = EntityQuery.from("People")
.where("Email", "any", "fldname",  "eq", "Russell@contoso.com");  

此处“fldname”是一个应该在电子邮件类型中的字段。

但是,如果我想比较像String这样的原始类型,我内部没有任何字段呢?在这种情况下,OData查询将如下所示:

$filter=Emails/any(s: s eq 'Russell@contoso.com')

但有没有办法使用Breeze形成这个查询?

1 个答案:

答案 0 :(得分:1)

是和否。

不,你不能用微风查询语言编写它,AFAIK不会理解对返回字符串数组的属性的过滤。

但是,您可以使用微风查询将任何 URL发送到服务器。如果您可以手动构建OData服务器将正确解释的URL,请直接发送并发送。

var qUrl = "People/?$filter=Emails/any(s: s eq 'Russell@contoso.com')";
var q = breeze.EntityQuery.from(qUrl);
manager.executeQuery(q).then(...).catch(...);