odata 仅从一组扩展的子记录中获取第一条记录?
odata Taking only the 1st record from an expanded set of child records?
有没有办法指定我只想 return 使用 odata 的扩展子记录集的第一条(或最后一条)记录?
http://myurl/odata/ParenTable?$count=true&$filter=(Id eq 123456)&$expand=ChildTable($orderby=AddedTimeStamp desc;$top=1)
这是我正在尝试的,但return是消息
The query specified in the URI is not valid
您的 URL 约定符合 OData v4 的预期行为。
11.2.4.2.1 Expand Options
The set of expanded entities can be further refined through the application of expand options, expressed as a semicolon-separated list of system query options, enclosed in parentheses.
Allowed system query options are $filter
, $select
, $orderby
, $skip
, $top
, $count
, $search
, $expand
, and $levels
.
但是已知有一些旧版本和专有实现不支持所有或在某些情况下任何这些选项,如过滤或限制($skip
,$top
) $expand
查询选项中的表达式。
.Net implementations do not support $search
OOTB, the API author must manually implement the query option.
该特定错误通常表明 path 组件无效,而不是 query 无效,因为大多数 OData 运行时将 return 当正确解析资源或集合但无法解析或执行查询时,更具描述性的错误响应。在这种情况下,我怀疑你已经匿名化了 path,所以我们只能推测,例如在记录的路径中有一个明显的潜在拼写错误,
有一个't'不见了你试过了吗:
http://myurl/odata/ParentTable?$count=true&$filter=(Id eq 123456)&$expand=ChildTable($orderby=AddedTimeStamp desc;$top=1)
或者资源是否多元化:
http://myurl/odata/ParenTables?$count=true&$filter=(Id eq 123456)&$expand=ChildTable($orderby=AddedTimeStamp desc;$top=1)
http://myurl/odata/ParentTables?$count=true&$filter=(Id eq 123456)&$expand=ChildTable($orderby=AddedTimeStamp desc;$top=1)
您应该包括一个确实有效的 URL 示例,尝试在扩展子句中不使用 $top
和 $orderby
子句。我们需要消除与错误路径相关的错误,而不是错误查询。
如果您通过 Postman 执行此操作,则可以更新您的问题和 post 整个回复内容。
Both the current ASP.Net and ASP.Net Core implementations do support this, if you are the author of the API please include your controller implementation and the version of the framework you are using so we can assist in greater detail.
另一种选择
如果您的 API 不支持此功能,那么考虑到您对 $top=1
的限制,您可以反转请求并改用 Child
集合资源:
假设 ~/ChildTable
是您的示例扩展中提到的 ChildTable
的路径
http://myurl/odata/ChildTable?$filter=ParentTable/Id eq 123456&$orderby=AddedTimeStamp desc&$top=1&$expand=ParentTable
有没有办法指定我只想 return 使用 odata 的扩展子记录集的第一条(或最后一条)记录?
http://myurl/odata/ParenTable?$count=true&$filter=(Id eq 123456)&$expand=ChildTable($orderby=AddedTimeStamp desc;$top=1)
这是我正在尝试的,但return是消息
The query specified in the URI is not valid
您的 URL 约定符合 OData v4 的预期行为。
11.2.4.2.1 Expand Options
The set of expanded entities can be further refined through the application of expand options, expressed as a semicolon-separated list of system query options, enclosed in parentheses.Allowed system query options are
$filter
,$select
,$orderby
,$skip
,$top
,$count
,$search
,$expand
, and$levels
.
但是已知有一些旧版本和专有实现不支持所有或在某些情况下任何这些选项,如过滤或限制($skip
,$top
) $expand
查询选项中的表达式。
.Net implementations do not support
$search
OOTB, the API author must manually implement the query option.
该特定错误通常表明 path 组件无效,而不是 query 无效,因为大多数 OData 运行时将 return 当正确解析资源或集合但无法解析或执行查询时,更具描述性的错误响应。在这种情况下,我怀疑你已经匿名化了 path,所以我们只能推测,例如在记录的路径中有一个明显的潜在拼写错误, 有一个't'不见了你试过了吗:
http://myurl/odata/ParentTable?$count=true&$filter=(Id eq 123456)&$expand=ChildTable($orderby=AddedTimeStamp desc;$top=1)
或者资源是否多元化:
http://myurl/odata/ParenTables?$count=true&$filter=(Id eq 123456)&$expand=ChildTable($orderby=AddedTimeStamp desc;$top=1)
http://myurl/odata/ParentTables?$count=true&$filter=(Id eq 123456)&$expand=ChildTable($orderby=AddedTimeStamp desc;$top=1)
您应该包括一个确实有效的 URL 示例,尝试在扩展子句中不使用 $top
和 $orderby
子句。我们需要消除与错误路径相关的错误,而不是错误查询。
如果您通过 Postman 执行此操作,则可以更新您的问题和 post 整个回复内容。
Both the current ASP.Net and ASP.Net Core implementations do support this, if you are the author of the API please include your controller implementation and the version of the framework you are using so we can assist in greater detail.
另一种选择
如果您的 API 不支持此功能,那么考虑到您对 $top=1
的限制,您可以反转请求并改用 Child
集合资源:
假设 ~/ChildTable
是您的示例扩展中提到的 ChildTable
的路径
http://myurl/odata/ChildTable?$filter=ParentTable/Id eq 123456&$orderby=AddedTimeStamp desc&$top=1&$expand=ParentTable