【问题标题】:odata - combining $expand and $selectodata - 结合 $expand 和 $select
【发布时间】:2015-04-04 07:04:48
【问题描述】:

在 odata v4.0 中是否有将 $expand 和 $select 组合在一起的选项?

我有一个场景,我试图在其中获取特定列 productItemChoices 和项目。以下查询将为您提供所有 productItemChoices 中的列。我只需要一列 productItemChoices

odata/Products(08f80b45-68a9-4a9f-a516-556e69e6bd58)?$expand=productItemChoices($expand=item($select=name))

【问题讨论】:

    标签: select asp.net-web-api odata expand


    【解决方案1】:

    在这方面经历了很多时间之后,我终于得到了答案。我们可以将select 嵌套在expand 中,使用; 作为分隔符,类似于

    odata/Products(8)?$expand=choices($select=col1,col2;$expand=item($select=name))
    

    这在OData v4 $expand documentation 中有记录。该文档还列出了其他有用的示例,例如

    Categories?$expand=Products($filter=DiscontinuedDate eq null)
    Categories?$expand=Products/$count($search=blue)
    

    【讨论】:

    • 有效!有任何源文档吗?
    • 确实有效。这很有趣,因为我的文档(asp.NET WebAPI)说这样的东西应该可以工作:odata/Categories?$expand=Products&$select=Name,Products/Name。这可能是 Odata v3 和 v4 之间的区别吗?
    • 这确实是 v3 和 v4 之间的区别,就像在 stackoverflow.com/a/26746527/462781 发现的 rama 并使用 & 而不是 ;确实。
    • @Jerther 看看这个来源msdn.microsoft.com/en-us/library/gg334767.aspx 以供参考。
    • 完美运行谢谢!
    【解决方案2】:

    在选择中,可以使用实体/属性来选择展开实体的具体属性:

    $select=productItemChoices/columnyouwant
    

    我不确定您查询中的实体之间的关系。深入扩展时,我使用了以下语法(不带括号) - 在下面,我假设 Products 与 productItemChoices 和 productItemChoices 有项目

    $expand=productItemChoices, productItemChoices/item
    

    然后,选择

    $select=productItemChoices/productItemChoicesGuid, productItemChoices/item/name
    

    显然,如果关系不同,您需要对其进行一些更改

    【讨论】:

    • 我试过这个 odata/Products(08f80b45-68a9-4a9f-a516-556e69e6bd58)?$expand=productItemChoices($expand=item)&$select=productItemChoices/productItemChoicesGuid 它给了我一个错误说{ "error": { "code": "", "message": "URI 中指定的查询无效。在 select 子句中找到具有多个导航属性的路径。请改写您的查询,以便每个级别的 select或 expand 仅包含 TypeSegments 或 Properties。" } }
    • 用更多细节编辑了答案
    • 我在这里说的是odata v4...您给出的查询可能适用于v3
    • 我也在使用 v4。我的 v4 服务是 ASP.NET Web API 2.2 OData。您知道端点背后的技术是什么吗?另外,为了清楚起见,我建议在查询字符串中有一个 $expand 和一个 $select - 我之前没有看到用于 $expand/$select 的嵌套括号。
    • 这适用于我使用 SharePoint Online OData 服务。
    猜你喜欢
    • 2015-07-30
    • 1970-01-01
    • 1970-01-01
    • 2019-12-02
    • 2017-02-27
    • 2022-11-30
    • 1970-01-01
    • 2017-02-27
    • 1970-01-01
    相关资源
    最近更新 更多