OData WebAPI查询儿童和范围

时间:2012-12-03 11:12:24

标签: c# asp.net-web-api odata

我从一个非常简单的Web API项目得到以下输出,我想过滤掉没有将Children-property设置为null的所有“实体”。无论如何要做到这一点吗? OData-Query是吗?

接下来的问题是..是否可以创建一个查询,该查询返回名称以Emma开头的所有“父母”?

最后一个问题..是否可以使用“父”中的属性范围缩小...例如我可能想要根据“父”的年龄创建一个查询但我只想查看那个父母的孩子......在那里“范围”下来,所以输出只显示孩子们将是一个非常整洁的功能..

这是我的网址: {MYDOMAIN} / API /人/儿童$滤波器=儿童

这是我的XML:

<ArrayOfPerson xmlns:i="http://www.w3.org/2001/XMLSchema-instance" 
xmlns="http://schemas.datacontract.org/2004/07/MvcApplication5.Models">
<Person>
<Age>12</Age>
<Children i:nil="true"/>
<Name>Ada Svensson</Name>
</Person>
<Person>
<Age>19</Age>
<Children i:nil="true"/>
<Name>Emma Svensson</Name>
</Person>
<Person>
<Age>43</Age>
<Children>
<Person>
<Age>12</Age>
<Children i:nil="true"/>
<Name>Ada Svensson</Name>
</Person>
<Person>
<Age>19</Age>
<Children i:nil="true"/>
<Name>Emma Svensson</Name>
</Person>
</Children>
<Name>Bertil Svensson</Name>
</Person>
<Person>
<Age>34</Age>
<Children i:nil="true"/>
<Name>Kalle Persson</Name>
</Person>
</ArrayOfPerson>

提前致谢!

1 个答案:

答案 0 :(得分:2)

如果您的服务支持OData V3,那么您可以

/persons?$filter=Children/any()

(注意,如果Children是一个集合,那么它永远不会为null,它只能是空的 - 根据OData规则)。

目前无法过滤父级,然后仅使用普通OData请求子级。您可以过滤父项,然后同时获取父项和子项:

/persons?$filter=<my parent condition>&$expand=Children.