use*_*042 3 rest wcf wcf-data-services odata
我有一系列客户,每个客户都有一系列订单.
以下查询返回客户及其订单并按预期工作:
~Customers?$expand=Orders
Run Code Online (Sandbox Code Playgroud)
现在我想要获得现有客户,但是按Order.Amount> 100过滤他们的订单(我很高兴没有此类订单留在列表中的客户),
当我尝试以下内容时:
~Customers?$expand=Orders&$filter=Orders/Amount gt 100
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
The 'Amount' is not allowed at position ***. Member access or specifying a type identifier on a resource set reference is not allowed.
Run Code Online (Sandbox Code Playgroud)
我可以遍历客户并致电
~Customers('Blah')/Orders?$filter=Amount gt 100
Run Code Online (Sandbox Code Playgroud)
哪个有效,但我真的很想一气呵成.
你能就我如何做到这一点提出建议吗?
Jen*_*n S 13
这里有两件事会引起问题.首先,听起来您想要过滤Orders集合,而不是过滤集合(即,您总是希望返回所有客户,但您只希望扩展某些订单).当你有一个看起来像的URI时,EntitySet?$filter=<some predicate>过滤器总是适用EntitySet于你的情况Customers(这不是你想要的).
其次,原因~Customers?$expand=Orders&$filter=Orders/Amount gt 100甚至没有正确过滤客户是因为Orders是实体的集合,而不是单个实体.Orders/Amount如果你认为Orders是一个列表,那就没有意义了Order/Amount.如果您希望过滤器仅返回至少有一个订单Order/Amount大于100的客户,则可以使用以下any关键字:
~Customers?$expand=Orders&$filter=Orders/any(o: o/Amount ge 100)
Run Code Online (Sandbox Code Playgroud)
但同样,这会过滤客户,而不是订单.
鉴于您想要实际过滤订单,以下是否适合您?
~Orders?$expand=Customer&$filter=Amount gt 100
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5107 次 |
| 最近记录: |