OData V4中如何筛选Status数组非空的ABCRevisions数据?
OData V4筛选关联数组非空的条目解决方案
要筛选出ABCRevisions中Status数组非空的条目,你需要在$filter里使用OData的any()函数判断关联集合是否存在元素,而非在$expand子句内做过滤。
正确请求示例
ODataService/v1/ODataServiceName.svc/v1/ABCRevisions?$expand=Status&$filter=Status/any()
之前方法无效的原因
- 方法a的
$expand=Status($filter=Name ne null)仅对Status数组内的元素做过滤,只会移除Status中Name为空的元素,但不会剔除本身Status为空数组的ABCRevisions条目,因此结果仍会包含这类数据。 - 方法b的
$expand=Status/$Order(推测你想写$count)仅用于获取Status数组的元素数量,不具备筛选父实体的能力,无法达成过滤目的。
扩展用法
如果需要同时满足Status数组非空且数组内元素符合特定条件(比如Name不为空),可以给any()添加条件:
ODataService/v1/ODataServiceName.svc/v1/ABCRevisions?$expand=Status&$filter=Status/any(s: s/Name ne null)
内容的提问来源于stack exchange,提问作者Elvisworld
相关产品推荐
相关产品推荐

