我有一系列客户,每个客户都有一系列订单。
以下查询返回客户及其订单并按预期工作:
~Customers?$expand=Orders
现在我想获得现有客户,但是按Order.Amount>过滤他们的订单100(我很高兴没有此类订单的客户留在列表中),
当我尝试以下内容时:
~Customers?$expand=Orders&$filter=Orders/Amount gt 100
我收到以下错误:
The 'Amount' is not allowed at position ***. Member access or specifying a type identifier on a resource set reference is not allowed.
我可以遍历客户并致电
~Customers('Blah')/Orders?$filter=Amount gt 100
有效,但我真的很想一次完成它。
你能就我如何做到这一点提出建议吗?
答案 0 :(得分:13)
这里有两件事会引起问题。首先,听起来您想要过滤Orders集合,而不是过滤集合(即,您总是希望返回所有客户,但您只希望扩展某些订单)。当您的URI看起来像EntitySet?$filter=<some predicate>
时,过滤器始终适用于EntitySet
,在您的情况下为Customers
(这不是您想要的)。
其次,~Customers?$expand=Orders&$filter=Orders/Amount gt 100
甚至没有正确过滤客户的原因是因为Orders
是实体的集合,而不是单个实体。如果您将Orders视为列表,Orders/Amount
没有意义,只有Order/Amount
才有。如果您希望过滤器仅返回至少有一个订单Order/Amount
大于100的客户,则可以使用any
关键字:
~Customers?$expand=Orders&$filter=Orders/any(o: o/Amount ge 100)
但是,再次过滤客户,而不是订单。
鉴于您希望实际过滤订单,以下哪项适用于您?
~Orders?$expand=Customer&$filter=Amount gt 100