3

我有一系列客户,每个客户都有一个订单集合。

下面的查询返回客户及其订单并按预期工作:

~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 

这行得通,但我真的很想一口气完成它。

你能建议我如何做到这一点吗?

4

1 回答 1

13

这里有两件事会导致问题。首先,听起来您想过滤 Orders 集合,而不是 Customers 集合(即,您总是希望返回所有客户,但您只希望扩展某些 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)

但同样,它过滤的是客户,而不是订单。

鉴于您想实际过滤订单,以下内容对您有用吗?

~Orders?$expand=Customer&$filter=Amount gt 100
于 2013-06-06T16:53:37.513 回答