我有一个实体,[Part]
, 具有导航属性[Representation]
而在实体[Representation]
中有一个属性[Files]
,它是实体文件数组 我的问题是: 可以过滤 Representation.Files 已filetype='pdf'
的部件 我试过这个,但失败了
Part?$filter=Representation/any(r:r/Files/filetype eq 'pdf')&$expand=representation
$metadata摘录:
<EntityType Name="Part" BaseType="Entity">
<NavigationProperty Name="Representations" Type="Collection(Representation)"> </NavigationProperty>
</EntityType>
<EntityType Name="Representation">
<Property Name="AdditionalFiles" Type="Collection(RepresentationHyperlink)"> </Property>
</EntityType>
注意:
Files
是具有数组类型的属性,但它不是导航属性。
在 OData v4 中,如果Files
是集合导航属性,则以下内容将起作用:
...Part?$filter=Representation/Files/any(f:f/filetype eq 'pdf')&$expand=representation
any
函数在多个导航链接上运行,因此它应该紧跟在它之后出现,而不是在它之前出现。
不支持
由于Files
不是集合属性,而是数组值,因此这超出了 OData v4 规范的范围。
某些 API 实现确实支持模型中的数组值,但这通常是通过 OData 配置中的花式映射来实现的,从 OData 的角度来看,这些属性必须表示为集合属性以供 lambda 运算符评估。
此方案中的替代解决方案是在控制器上创建一个函数来专门处理此请求,以传入要筛选的文件类型,或者创建一个仅返回pdf
表示形式的显式函数。