我显然是OData查询的新手,可以使用一些指导。我希望使用$ filter过滤出结果,而且我似乎找不到很好的语法资源。我正在使用Odata选择表A,在导航属性B上展开并计算所有出现的事件,其中B为1)一个空数组,2)计数为1个对象,或3)计数大于1个对象。这是我要在propertyB上进行扩展的示例。任何帮助,建设性的批评将不胜感激!
http://{{baseUrl}}/odata/tableA?&$top=50&$count=true&$expand=propertyB
现在,我试图使用过滤器功能仅过滤出具有propertyB作为空数组的数据。
{
"myNumber": "00000056218",
"actionType": null,
"numberXTimes": [],
"propertyB": []
}
这里是一个示例,其中我想返回显示“ propertyB”具有一个对象的值:
http://{{baseUrl}}/odata/tableA?&$top=50&$expand=propertyB&$filter=contains(propertyB/myNumber, (myNumber.Length ==1))&$count=true
{
"myNumber": "00000056218",
"actionType": null,
"numberXTimes": [],
"propertyB": [
{
"myNumber": "00000056218",
"desiredId": 300387799,
}
]
}
很遗憾,我的查询无法正常工作。希望您能帮助您解决此问题。预先感谢!
我没有适合您的精确解决方案,但有几种解决方法。
您可以在扩展参数'propertyB'上使用$ count来获取'propertyB'中存在的元素数。如下所示:
http:// {{baseUrl}} / odata / tableA?&$ top = 50&$ count = true&$ expand = propertyB($ count = true)
响应将是:
{
"myNumber": "00000056218",
"actionType": null,
"numberXTimes": [],
"[email protected]": 1,
"propertyB": [
{
"myNumber": "00000056218",
"desiredId": 300387799
}
]
}
但是使用此功能您只是获得计数而实际上没有进行过滤。
您可以使用odata的'any()'lambda函数来仅获取'propertyB'为非空的那些条目,并过滤掉其余部分。
http:// {{baseUrl}} / odata / tableA?&$ top = 50&$ count = true&$ expand = propertyB&$ filter = propertyB / any()
我希望这些变通办法适合您的情况。