OData 中的过滤器和集合

问题描述 投票:0回答:3

这与 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')

但认为必须有一种更优雅或更短的方法来做到这一点。

azure odata
3个回答
3
投票

不幸的是,据我所知,没有。满足您要求的运算符是“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'”或其他一些属性。


1
投票
OData v4.01 支持

IN
运算符

https://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_BuiltinFilterOperations

Address/City in ('Redmond', 'London')

0
投票

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'))
© www.soinside.com 2019 - 2024. All rights reserved.