使用odata选择不同的值

时间:2010-10-01 12:21:33

标签: odata

我正在尝试创建一个对odata webservice的调用,该调用只会选择某些属性的不同值。有没有很好的例子说明如何做到这一点?

2 个答案:

答案 0 :(得分:29)

目前,OData协议不支持distinct运算符或任何其他有助于此类查询的运算符(假设您正在某个实体上查找原始属性的分辨值)。 您应该能够通过在服务器上实现服务操作来解决此问题,该服务器对通常具有该功能的基础提供程序执行此类查询。然后客户端可以调用该服务操作。

答案 1 :(得分:1)

注意:我知道这很旧,但仍然显示在搜索响应中。现在有一个很好的解决方案。

在OData v4中,支持$apply,除其他外,$apply可用于从结果集中返回一组不同的字段。

  

请参阅相关讨论:Applying Distinct to ODataQuery

     

来自OData v4 spec
  查询选项$apply采用一系列的设置转换,用正斜杠分隔以表示它们是连续应用的,例如每个转换的结果是下一个转换的输入   $ apply是需要的功能

tl; dr;
基本上,如果我有一个包含许多字段的表,但是我只想返回许多特定字段的不同记录,则第一步是识别不同的列,我们将它们称为Name和{{1} }。
只需使用Id函数即可获得一个独特的结果集,其中仅包含具有以下语法的Names和Id列:

$apply

让我们以示例的方式执行此操作,http://url.to/tableresource?$apply=groupby((Name,Id)) 具有1000行,但是只有几个承包商,我想在下拉列表中显示承包商的名称以用于过滤查询。

我的不同列是TuberInspectionsContractorName

ContractorId

如果数据结构不够平坦,则检索简单的嵌套结果结构的OOTB支持有限,当前使用以下语法仅支持单个导航路径。上面的查询也可以写成:

GET /odata/TuberInspections?$apply=groupby((ContractorName,ContractorId)) HTTP/1.1
Host: localhost:1230

Response:
    { 
        "@odata.context": "http://localhost:1230/odata/$metadata#TuberInspections(ContractorName,ContractorId)",
        "value": [
            {
                "@odata.id": null,
                "ContractorId": 11534,
                "ContractorName": "Kermit d'Frog"
            },
            {
                "@odata.id": null,
                "ContractorId": 11539,
                "ContractorName": "Carlos Spicy Wiener"
            },
            {
                "@odata.id": null,
                "ContractorId": 16827,
                "ContractorName": "Jen Gelfling"
            }
        ]
    }

嵌套或堆叠GET /odata/TuberInspections?$apply=groupby((Contractor/EntityID,Contractor/Initials)) Host: localhost:1230 Response: { "@odata.context": "http://localhost:1230/odata/$metadata#TuberInspections(Contractor(EntityID,Initials))", "@odata.count": 3, "value": [ { "@odata.id": null, "Contractor": { "@odata.id": null, "Initials": "KdF", "EntityID": 11534 } }, { "@odata.id": null, "Contractor": { "@odata.id": null, "Initials": "SW", "EntityID": 11539 } }, { "@odata.id": null, "Contractor": { "@odata.id": null, "Initials": "Jen", "EntityID": 16827 } } ] } 转换有更高级的(复杂的)变体,其中包括返回与每个不同结果相对应的唯一行数的计数。

有关更多信息,请发布特定问题并使用OData-v4进行标记,您将找到所需的所有帮助:)