Filter 是否可以根据扩展实体的集合属性筛选odata

Filter 是否可以根据扩展实体的集合属性筛选odata,filter,odata,expand,odata-v4,Filter,Odata,Expand,Odata V4,我有一个实体,[Part], 它具有导航属性[表示] 在实体[Representation]中有一个属性[Files],即实体文件数组 我的问题是: 可以筛选表示法.Files所针对的部件。filetype='pdf' 我试过了,但失败了 Part?$filter=Representation/any(r:r/Files/filetype eq 'pdf')&$expand=representation $metadata摘录: 注意:文件是具有数组类型的属性,而不是导航属性

我有一个实体,
[Part]
, 它具有导航属性
[表示]
在实体
[Representation]
中有一个属性
[Files]
,即实体文件数组 我的问题是: 可以筛选表示法.Files所针对的部件。
filetype='pdf'
我试过了,但失败了

  Part?$filter=Representation/any(r:r/Files/filetype eq 'pdf')&$expand=representation
$metadata摘录:

注意:
文件
是具有数组类型的属性,而不是导航属性


在OData v4中,如果
文件
是集合导航属性,则以下操作将起作用:

...Part?$filter=Representation/Files/any(f:f/filetype eq 'pdf')&$expand=representation
any
功能在多个导航链接上运行,因此它应该立即出现在多个导航链接之后,而不是之前

不支持 由于
文件
不是一个集合属性,而是一个数组,因此这超出了OData v4规范的范围

一些API实现确实支持模型中的数组值,但是这通常是通过OData配置中的奇特映射实现的,从OData的角度来看,这些属性必须表示为集合属性才能进行评估



在这种情况下,另一种解决方案是在控制器上创建一个函数来专门处理此请求,或者传入要过滤的文件类型,或者生成一个只返回
pdf
表示的显式函数。

在OData v4中,如果
文件
是集合导航属性,则以下操作将起作用:

...Part?$filter=Representation/Files/any(f:f/filetype eq 'pdf')&$expand=representation
any
功能在多个导航链接上运行,因此它应该立即出现在多个导航链接之后,而不是之前

不支持 由于
文件
不是一个集合属性,而是一个数组,因此这超出了OData v4规范的范围

一些API实现确实支持模型中的数组值,但是这通常是通过OData配置中的奇特映射实现的,从OData的角度来看,这些属性必须表示为集合属性才能进行评估



此场景中的另一个解决方案是在控制器上创建一个函数,专门处理此请求,要传入要筛选的文件类型,或者创建一个只返回
pdf
表示的显式函数。

您使用的是哪个版本的OData?您也应该发布收到的错误消息,在OData上,错误几乎总是有意义的。您使用的是什么版本的OData?您也应该发布收到的错误消息。在OData上,错误几乎总是有意义的。它不起作用,返回的URI格式不正确。可能是因为这些文件不是导航属性?它是普通属性,但数据类型是对象数组。您使用的是什么后端数据库引擎?在您的问题中,您是否可以发布
部分
表示
$metadata
。上述语法仅适用于导航属性,但我们可能能够将
文件
公开为伪集合(实体或ComplexType)。这是Odata v4,请查看元数据部分它不起作用,返回的URI格式不正确。可能是因为这些文件不是导航属性?它是普通属性,但数据类型是对象数组。您使用的是什么后端数据库引擎?在您的问题中,您是否可以发布
部分
表示
$metadata
。上述语法仅适用于导航属性,但我们可以将
文件
公开为伪集合(实体或复合类型)。这是Odata v4,请参见元数据部分