C# 阵列元素上的oData滤波器

C# 阵列元素上的oData滤波器,c#,rest,odata,C#,Rest,Odata,我想知道是否可以对特定的数组元素进行过滤。 我知道可以对嵌套属性进行筛选,并对集合应用任何/所有函数,但没有找到任何关于如何对集合的特定索引进行筛选的文档。 例如(用Linq表示): 数据。其中(d=>d.propositions[0]。Growth.Value==0.05m) 我希望出现如下语法: $filter=提案(0)/增长/价值当量0.05百万 OData基于实体数据模型,该模型不支持有序集合(数组)。因此,没有用于按位置过滤的内置语法 如果您的目标是使用客户机提供的值过滤默认的Gro

我想知道是否可以对特定的数组元素进行过滤。 我知道可以对嵌套属性进行筛选,并对集合应用任何/所有函数,但没有找到任何关于如何对集合的特定索引进行筛选的文档。 例如(用Linq表示):

数据。其中(d=>d.propositions[0]。Growth.Value==0.05m)

我希望出现如下语法:

$filter=提案(0)/增长/价值当量0.05百万


OData基于实体数据模型,该模型不支持有序集合(数组)。因此,没有用于按位置过滤的内置语法

如果您的目标是使用客户机提供的值过滤默认的
Growth/Value
,那么您可以通过OData函数来实现。在Web API配置中声明函数

// builder is an instance of ODataConventionModelBuilder
var defaultGrowthValueFunction = builder.EntityType<Zebra>().Collection.Function("WhereGrowthEquals");
defaultGrowthValueFunction.Parameter<decimal>("value");
defaultGrowthValueFunction.ReturnsCollectionFromEntitySet<Zebra>("Zebras");
请注意,绑定函数在ODataRoute属性中是命名空间限定的。(
Default
是默认的命名空间名称。)

最后,从客户端调用函数,如下所示

GET http://hostname/Zebras/Default.WhereGrowthEquals(value=0.05)

谢谢你详细的回答。实际上,我需要用一种通用的方式来表达过滤请求,我不能在服务器端实现特定的过滤。我的意思是,请求将由客户端网格根据显示的列生成,这些列是复杂对象(包括数组)的投影。我可以有其他列引用类似于建议[1]的路径。另一个数组[2]。Amount.Value。因此,我正在寻找一个标准的通用语法来在odataquery.Hmmm中表示该路径。我很好奇您是如何对阵列进行建模的。您的$metadata文档看起来像什么?
GET http://hostname/Zebras/Default.WhereGrowthEquals(value=0.05)