首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何为这些查询获得适当的结果?

如何为这些查询获得适当的结果?
EN

Stack Overflow用户
提问于 2020-02-05 05:13:09
回答 1查看 519关注 0票数 1
  1. 需要单独执行并返回每个订单的第一订单详细信息。下面不起作用

https://services.odata.org/Experimental/Northwind/Northwind.svc/Customers?$expand=Orders($expand=Order_Details;$top=1)

  1. 需要根据订单id过滤记录。下面不工作,并抛出“术语'Orders($expand=Order_Details)$filter=OrderID eq‘10643’在$select或$expand表达式中无效”

https://services.odata.org/Experimental/Northwind/Northwind.svc/Customers?$expand=Orders($expand=Order_Details)$filter=OrderID eq '10643‘

  1. 无效但返回的结果

详细信息 https://services.odata.org/Experimental/Northwind/Northwind.svc/Regions?expand=Territories

  1. 不返回儿童

https://services.odata.org/Experimental/Northwind/Northwind.svc/Products?&expand=Suppliers https://services.odata.org/Experimental/Northwind/Northwind.svc/Regions?&expand=Territories

EN

回答 1

Stack Overflow用户

发布于 2020-02-12 03:39:50

https://services.odata.org/Experimental/Northwind不再是“最佳实践”

这是一个大胆的声明,但这个问题证明了许多高级查询功能没有在发布的服务中得到充分或正确的实现。

虽然许多开发人员可能使用它来实践OData查询概念,但考虑到OData实现在很大程度上取决于开发人员及其使用的包的版本,如果您针对要查询的实际服务的活动或开发实现进行查询,则可能具有更大的商业价值。

下面是对OPs查询的分析,以及如何根据OData-V4规范实现所需的响应,并通过使用以下NuGet包的已部署的API进行验证:

  • Microsoft.AspNet.OData v7.3.0
  • Microsoft.OData.Core v7.6.2

我用于测试的实际API是专有的,不能在这里发布。

  1. 根据规范,您必须将$top说明符移动到Order_Details扩展。 https://services.odata.org/Experimental/Northwind/Northwind.svc/Customers? $expand=Orders($expand=Order_Details($top=1)) 然而: https://services.odata.org/Experimental/Northwind没有按照5.1.3系统查询选项$expand中定义的那样在扩展中正确地实现$top查询选项 查询选项可应用于扩展的导航属性,方法是在导航属性名称中附加一个以分号分隔的查询选项列表(括在括号中)。允许的系统查询选项有:$filter__、$select__、$orderby__、$skip__、$top__、$count__、$search__和$expand__。

然而,$top在OData v4的ODataLib v7+ (.Net)实现中得到了支持。因此,语法是正确的,但如果使用此语法的查询不起作用,则应向API开发人员查询他们的意见。

注意:当使用$top时,您还应该使用$orderby来确保查询结果是可靠和可复制的:

https://services.odata.org/Experimental/Northwind/Northwind.svc/Customers? $expand=Orders($expand=Order_Details($orderby=ProductID;$top=1))

  1. 若要在扩展中应用多个查询选项,必须使用分号:;分隔.但是,这本身并不会阻止其他客户记录被返回,所以您还必须添加一个根级过滤器,这是一个复杂的事实,因为Orders是一个集合。我们可以使用any函数只返回具有指定Id的订单的客户: 还请注意,OrderID是数字的,所以不要用引号包装比较值。

( $expand=Orders($expand=Order_Details;$filter=OrderID eq 10643) &$ https://services.odata.org/Experimental/Northwind/Northwind.svc/Customers? =https://services.odata.org/Experimental/Northwind/Northwind.svc/Customers?/any(o:o/OrderID 10643)

这可以使用参数别名进一步简化:

&$ $expand=Orders($expand=Order_Details;$filter=OrderID = https://services.odata.org/Experimental/Northwind/Northwind.svc/Customers? /any(o:O/orderId @orderId) &@orderId='10643‘

然而:

https://services.odata.org/Experimental/Northwind没有正确地实现https://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part2-url-conventions.html#sec_ParameterAliases,因此无法验证此服务的别名语法。

也请注意

该实验性服务没有正确地将筛选器应用于根元素或导航集合,但是这里显示的语法与.Net ODataLib实现的OData v4相反。

  1. 您的$expand不能工作的原因是您已经从参数名称中删除了$。OData查询解释器仅标识以$开头的查询选项。另一方面,根据https://services.odata.org/Experimental/Northwind/Northwind.svc/$metadata#Regions,对于$expand没有Order_Details导航属性: 因此,当您用正确的语法再次尝试时: 详细信息 您将得到预期的消息: 无法在“OrderID”类型上找到名为“NorthwindModel.Region”的属性

如果您为$expand查询选项放置了正确的$expandhttps://services.odata.org/Experimental/Northwind/Northwind.svc/Regions?$expand=Territories,则第二次尝试将有效。

OData查询解析器只查找带有$前缀的预期查询选项,这允许您的$逻辑仍然处理您认为合适的其他非OData参数。其他参数仍然是HTTP兼容的参数,odata.org上的实现不知道如何处理它们,它们只是被忽略了。

  1. 这只是在同一个问题上的另一个变化,与3,$是缺失。(我怀疑这个URL应该在3:https://services.odata.org/Experimental/Northwind/Northwind.svc/Products?$expand=Suppliers中)

因此,虽然https://services.odata.org/Experimental/Northwind不是100%可靠的,但.Net ODataLib、SAP或也不是。规范正在发展,目前可能有许多查询技术在任何提供者中都没有完全实现。 只需注意这个事实,当您使用API遇到问题时,第一个接触点应该是支持该特定API的开发人员或社区,这将取决于开发人员使用什么技术和包,以及最终他们在多大程度上支持指定的协议。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60076655

复制
相关文章
扭力弹簧介绍
扭力弹簧是一种机械蓄力结构,主要用于古代弩炮和其他弩类。扭力弹簧通过对材质柔软、韧度较大的弹性材料的扭曲或旋转进行蓄力、利用,使被发射物具有一定的机械能。
枫桦
2022/08/02
8090
ADAMS弹簧的使用
针对带有弹簧的结构无法直接将弹簧模型导入并具备对应的效果,ADAMS View中提供了弹簧模块,可以直接在软件中创建弹簧,本文主要通过案例简单介绍弹簧的使用方法。
学识家
2022/05/05
1.2K0
异常处理器详解 Java多线程异常处理机制 多线程中篇(四)
你会发现,然而并没有什么卵用,主线程中的try catch并不会得到什么信息,跟原来的结果还是一样的,线程直接宕掉
noteless
2019/03/04
1.5K0
异常处理器详解 Java多线程异常处理机制  多线程中篇(四)
使用Photoshop实现弹簧字效果
一、准备工作 软件环境:PhotoshopCS6 目的:使用路径实现弹簧字效果 二、实验步骤 1,新建画布  2,背景改为黑色,快捷键 Alt+Delete 3,键入文字 ,发现文字显示不出来,这时选
Zoctopus
2018/06/04
7110
iOS17适配指南之弹簧动画
YungFan
2023/07/09
6440
iOS17适配指南之弹簧动画
QT应用编程: QSpacerItem(弹簧)隐藏与显示
一、环境介绍 操作系统介绍:win10 64位 QT版本: 5.12.6 二、代码设置QSpacerItem隐藏与显示 UI设计界面上弹簧控件: 方法1: //显示弹簧控件代码 ui->horizontalSpacer->changeSize(100,20,QSizePolicy::Maximum); //设置尺寸与伸缩策略 ui->horizontalLayout->update(); //更新弹簧控件所在的布局器 //隐藏弹簧控件代码 ui->horizontalSpacer->change
DS小龙哥
2022/01/07
2.3K0
QT应用编程: QSpacerItem(弹簧)隐藏与显示
Newton–Raphson法解串联弹簧问题
如图所示的串联弹簧,F=100,弹簧刚度为k1 = 50 + 500u ,k2 = 100+ 200u ,u是弹簧伸长量,则平衡方程为 k1,k2带入得 Newton–Raphson方法就是一种线性迭
fem178
2018/04/08
6930
Newton–Raphson法解串联弹簧问题
Flash/Flex学习笔记(40):弹性运动续--弹簧
上一篇里演示的弹性运动加上摩擦力因素后,物体最终基本上都会比较准确的停在目标位置。但是我们回想一下现实世界中的弹簧,如果把弹簧的一头固定起来(即相当于目标点),而另一端栓一个球,把球拉开或压缩一定距离然后松手,事实上小球永远也不可能到达弹簧固定的那一端(因为弹簧即使压缩到最紧,也总有一定的长度) 所以如果要在Flash里模拟现实中的弹簧,真正的目标点绝不是弹簧的端点,而是目标点再偏移一段距离(即弹簧自然伸展时的长度) var ball:Ball = new Ball(6); addChild(ball);
菩提树下的杨过
2018/01/23
9180
Flash/Flex学习笔记(40):弹性运动续--弹簧
Modified Newton–Raphson method解串联弹簧问题
Newton–Raphson method每迭代一步,需要重新计算切线刚度矩阵,然后求解线性化的方程得到位移增量,计算量大,如图所示 Modified Newton–Raphson method不需要
fem178
2018/04/17
1.3K0
Modified Newton–Raphson method解串联弹簧问题
实现一个带下拉弹簧动画的 ScrollView
在刚推出的 Support Library 25.3.0 里面新增了一个叫 SpringAnimation 的动画,也就是弹簧动画。要是用它来做一个滑动控件下拉回弹的效果,应该不错吧。
NanBox
2019/07/09
1.3K0
华硕编程竞赛11月JAVA专场 A题自由弹簧 题解
小王一直都想在太空遨游,但是现在的他并没有这个超能力,所以他买了个 “自由弹簧” 打算过过瘾。
Designer 小郑
2023/08/01
1620
华硕编程竞赛11月JAVA专场 A题自由弹簧 题解
批标准化
批标准化是优化深度神经网络中最激动人心的最新创新之一。实际上它并不是一个优化算法,而是一个自适应的重参数化的方法,试图解决训练非常深的模型的困难。非常深的模型会涉及多个函数或层组合。在其他层不变的假设下,梯度用于如何更新每一个参数。在实践中,我们同时更新所有层。当我们进行更新时,可能会发生一些意想不到的结果这是因为许多组合在一起的函数同时改变时,计算更新的假设是其他函数保持不变。举一个例子,假设我们有一个深度神经网络,每一层只有一个单元,并且在每个隐藏层不使用激活函数: 。此处, 表示用于层 的权重。层 的输出是 。输出 是输入x的线性函数,但是权重wi的非线性函数。假设代价函数 上的梯度为1,所以我们希望稍稍降低 。然后反向传播算法可以计算梯度 。想想我们在更新 时会发生什么。近似 的一阶泰勒级数会预测 的值下降 。如果我们希望 下降 ,那么梯度中的一阶信息表明我们应设置学习率 为 。然而,实际的更新将包括二阶、三阶直到 阶的影响。
狼啸风云
2019/08/18
1.4K0
什么是 CSS 预处理器 与 后处理器
CSS处理器是做什么的? CSS本身不是编程语言,所以在项目越来越大时,开发和维护就会越来越复杂 CSS处理器做的事情 就是帮助我们提高大规模开发时的效率 CSS 预处理器 CSS 预处理器是一种语言,用来为 CSS 增加一些编程的的特性,无需考虑浏览器的兼容性问题 例如你可以在 CSS 中使用变量、简单的程序逻辑、函数等等在编程语言中的一些基本技巧,可以让你的 CSS 更见简洁,适应性更强,代码更直观等诸多好处 Sass、LESS、Stylus 是目前最主流的 CSS 预处理器 以 LESS 为例: LE
dys
2018/04/02
2.4K0
华硕编程竞赛11月JAVA专场 F题购买弹簧 题解
小王在体验完 ”自由弹簧“ 后,非常开心,想再玩一次,但厂家确告诉他试用已结束,如还需体验就要付费购买。
Designer 小郑
2023/08/01
1600
处理器结构
ISA:指令集体系架构,也是目前使用的最广的CPU体系架构。主要包括一套指令集以及一些寄存器,而程序员针对这些指令集以及寄存器进行编程,而不需要关心具体的硬件。
None_Ling
2018/10/24
1K0
处理器结构
处理器架构
常见处理器架构 Intel: CPU 64位 x64 x86_64 32位 x86 AMD: AMD 64位 32位 ---- ----
JNingWei
2018/09/28
6450
异常处理器
SpringMVC提供了一个处理控制器方法执行过程中所出现的异常的接口:HandlerExceptionResolver
用户9615083
2022/12/25
6000
异常处理器
R语言批数处理
在很多实验的时候都会遇到不同批次的数据整合的情况,那么今天就给大家介绍一个测序数据的批次数据分析的R包sva。首先我们看下包的安装,以及内置数据的安装:
一粒沙
2020/01/22
2K0
ABB HESG324013R100 核心是预张紧接触弹簧
与现有的推入式连接技术相比,Push-X再次提供了显著的技术优势。推入式允许刚性导体或预装配有套圈的导体免工具布线,而Push-X适用于所有类型的铜导体,无一例外地直接布线,无需用力或工具。
用户10530100
2023/05/06
1200
ABB HESG324013R100 核心是预张紧接触弹簧
【《超标量处理器基础》学习笔记一】处理器设计
体系结构指指令集体系结构,即指令集的规范,而微体系结构是指体系结构的具体逻辑实现,同一种指令集体系结构可以用不同的微体系结构,并采用不同的流水线设计,不同的分支预测算法等。
闪电gogogo
2019/11/14
1.4K0

相似问题

Spring不能配置Dispatcher Servlet权限

10

Spring中dispatcher servlet xml的名称

15

spring dispatcher-servlet.xml不工作

30

Spring MVC dispatcher servlet.xml错误

25

如何为spring创建servlet-context.xml和servlet-context-dispatcher.xml文件

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文