o数组元素上的数据筛选器
本文关键字:筛选 数据 数组元素 | 更新日期: 2023-09-27 18:28:03
我想知道是否可以对特定的数组元素进行筛选。我知道可以对嵌套属性进行筛选,也可以对集合应用任何/所有函数,但没有找到任何关于如何对集合的特定索引进行筛选的文档。举个例子(用Linq表示):
数据。其中(d=>d.建议书[0]。增长值==0.05m)
我期待一个语法像:
$filter=提案(0)/增长/价值eq 0.05M
如果您的目标是使用客户端提供的值根据默认的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");
该函数名为WhereGrowthEquals
,它绑定到Zebras
实体集。(我发明了一个名为Zebra
的实体类型来托管上面示例中的Proposals
阵列。)
现在定义ZebrasController
中的函数。(为了测试,我定义了一个名为AllZebras
的Zebra
实例的静态列表。)
public class ZebrasController : ODataController
{
[HttpGet]
[ODataRoute("Zebras/Default.WhereGrowthEquals(value={value})")]
public IHttpActionResult WhereGrowthEquals(decimal value)
{
return this.Ok(AllZebras.Where(z => z.Proposals[0].Growth.Value == value));
}
}
请注意,绑定函数在ODataRoute属性中是命名空间限定的。(Default
是默认的命名空间名称。)
最后,从客户端调用函数,如下所示。
GET http://hostname/Zebras/Default.WhereGrowthEquals(value=0.05)