odata - 结合 $expand 和 $select
Posted
技术标签:
【中文标题】odata - 结合 $expand 和 $select【英文标题】:odata - combining $expand and $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))
【问题讨论】:
【参考方案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 之间的区别,就像在 ***.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 服务。以上是关于odata - 结合 $expand 和 $select的主要内容,如果未能解决你的问题,请参考以下文章
将 ODATA $expand 查询选项与 WebAPI 和 ViewModel 一起使用
OData - 在 $expand 中的集合上嵌套 $filter