OData查询嵌套导航属性上的$Filter

人气:243 发布:2022-10-16 标签: entity-framework wcf-data-services odata

问题描述

我有一个包含订单导航属性的实体客户和一个包含产品导航属性的订单(一对多)。

现在我如何筛选已订购特定产品的所有客户。我尝试了下面提到的每种排列,但引发了odata异常:

试用版1)Customers?$filter=Orders/Products/any(d:d/ProductCode公式1)

试用2)Customers?$expand=Orders($expand=Products))&;$filter=Orders/Products/any(d:d/ProductCode公式‘code1’)

试用3)Customers?$expand=Orders($expand=Products))&;$filter=Orders/any(d:d/Products/ProductCode公式‘code1’)

请建议正确的OData查询格式。

推荐答案

我认为您在这里需要两个不同的any子句,因为我认为您要求的是"具有任何订单的客户,而这些客户又拥有任何产品,其产品代码为‘code1’"

所以我认为它应该是这样的:

Customers?$filter= Orders/any(o: o/Products/any(p: p/ProductCode eq 'code1'))

以下是使用Trippin OData服务示例的示例:http://services.odata.org/V4/TripPinServiceRW/People?$filter=Friends/any(f:%20f/Trips/any(t:%20t/Name%20eq%20'Trip%20in%20US'))&$expand=Friends($expand=Trips)

125