这与 Azure 最近推出的搜索服务有关,该服务目前处于预览状态。我试图弄清楚如何将 OData 的过滤器与集合一起使用。我知道我可以做到这一点:
$filter=Products/any(p: p eq 'WidgetA')
这将按 WidgetA 过滤 Products 集合。我想弄清楚的是如何指定 WidgetA 或 WidgetB。我知道我可以做到这一点:
$filter=Products/any(p: p eq 'WidgetA') or Products/any(p: p eq 'WidgetB')
但认为必须有一种更优雅或更短的方法来做到这一点。
不幸的是,据我所知,没有。满足您要求的运算符是“in”,但协议中没有:http://docs.oasis-open.org/odata/odata/v4.0/os/part2-url-conventions/odata-v4 .0-os-part2-url-conventions.html
还有一件事:范围变量后面应该有一个属性:
http://host/service/Orders?$filter=Items/any(d:d/Quantity gt 100)
在您的情况下,它应该是“p/Name eq 'WidgetA'”或其他一些属性。
IN
运算符
Address/City in ('Redmond', 'London')
Microsoft Azure 建议使用 "search.in" 来匹配值。它类似于 OData 中的“in”命令,但目前 Azure 不支持“in”。您可以在此处找到更多信息。
例如:
group_ids/any(g: g eq '123' or g eq '456' or g eq '789')
可以改为:
group_ids/any(g: search.in(g, '123, 456, 789'))