是否通过Odata查询选择展开的空数组?

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

我显然是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,

                }
             ]

          }

很遗憾,我的查询无法正常工作。希望您能帮助您解决此问题。预先感谢!

arrays filter syntax odata
1个回答
0
投票

我没有适合您的精确解决方案,但有几种解决方法。

您可以在扩展参数'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()

我希望这些变通办法适合您的情况。

© www.soinside.com 2019 - 2024. All rights reserved.