有什么方法可以使用 Breeze 库形成像 $filter=Emails/any(s: s eq 'somestring') 这样的 Odata 过滤器吗?
Is there any way to form the Odata filter like $filter=Emails/any(s: s eq 'somestring') using Breeze library?
例如我的模型结构如下:
{
"@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" 电子邮件的人。 (注意 Emails 是原始类型字符串的集合。)
在处理复杂对象的集合时,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 形成此查询吗?
是也不是。
不,您不能使用轻巧的查询语言编写它,AFAIK 不理解对 属性 returns 字符串数组的过滤。
但是是的,您可以通过轻而易举的查询将 any 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(...);
例如我的模型结构如下:
{
"@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" 电子邮件的人。 (注意 Emails 是原始类型字符串的集合。)
在处理复杂对象的集合时,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 形成此查询吗?
是也不是。
不,您不能使用轻巧的查询语言编写它,AFAIK 不理解对 属性 returns 字符串数组的过滤。
但是是的,您可以通过轻而易举的查询将 any 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(...);