过滤嵌套结果是OData查询

时间:2013-09-20 20:50:54

标签: rest odata

我有一个OData查询返回一堆项目。结果回来看起来像这样:

{
    "d": {
        "__metadata": {
            "id": "http://dev.sp.swampland.local/_api/SP.UserProfiles.PeopleManager/GetPropertiesFor(accountName=@v)",
            "uri": "http://dev.sp.swampland.local/_api/SP.UserProfiles.PeopleManager/GetPropertiesFor(accountName=@v)",
            "type": "SP.UserProfiles.PersonProperties"
        },
        "UserProfileProperties": {
            "results": [
                {
                    "__metadata": {
                        "type": "SP.KeyValue"
                    },
                    "Key": "UserProfile_GUID",
                    "Value": "66a0c6c2-cbec-4abb-9e25-cc9e924ad390",
                    "ValueType": "Edm.String"
                },
            {
                "__metadata": {
                    "type": "SP.KeyValue"
                },
                "Key": "ADGuid",
                "Value": "System.Byte[]",
                "ValueType": "Edm.String"
            },
            {
                "__metadata": {
                    "type": "SP.KeyValue"
                },
                "Key": "SID",
                "Value": "S-1-5-21-2355771569-1952171574-2825027748-500",
                "ValueType": "Edm.String"
            }

           ]
        }
    }
}

实际上,在 UserProfileProperties 集合中有很多项目(100+)回来了,但我只是在寻找一些KEY与几个项目相匹配的项目,但我无法想象确切地说我需要我的过滤器。我已经尝试了$ filter = UserProfileProperties / Key eq'SID',但这仍然给了我一切。还试图找出如何撤回多个项目。

想法?

1 个答案:

答案 0 :(得分:1)

我相信你忘记了每个结果如何有一个键,而不是UserProfileProperties,所以UserProfileProperties / Key实际上并不存在。相反,因为结果是一个数组,你必须检查某个位置(例如结果(1))或使用任何或所有的oData函数。

尝试 $ filter = UserProfileProperties / results / any(r:r / Key eq'SID')如果您想要只有其中一个键的所有配置文件是SID或使用

$ filter = UserProfileProperties / results / all(r:r / Key eq'SID')如果你想要每个结果都有一个等于SID的密钥的配置文件。