OData-$ expand中的集合上的嵌套$ filter

时间:2019-05-22 11:21:47

标签: c# asp.net rest wcf odata

类似于此示例,我想过滤“订单”中的集合。 http://odata.github.io/WebApi/04-03-filter-in-expand/

假设我们有以下模型:

public class Customer
{
    public int Id { get; set; }
    public string Name { get; set; }
    public IEnumerable<Order> Orders { get; set; }
}

public class Order
{
    public int Id { get; set; }
    public string Name { get; set; }
    public IEnumerable<Article> Articles { get; set; }
}

public class Article
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Category { get; set; }
}

如果我调用以下URI ... / Customers?$ expand = Orders($ filter = Articles / Category eq'Cookies') ,我收到一条错误消息,说

  

属性“ Category”的属性访问的父值不是   一个值。属性的访问只能被应用到一个单一的值。

但是我可以使用以下结构: ... / Customers?$ expand = Orders($ filter = Articles / any(a:a / Category eq'Cookies'))

任何全部的问题在于,它正在基于子级过滤父数据。如果“文章”与“类别”存在,则将返回所有文章。但我想减少子项,以仅显示“ cookie”类别的文章。

1 个答案:

答案 0 :(得分:0)

我认为您需要使用两个嵌套的不同any,如果我理解您的话,则想过滤Articles类别中的所有Cookies,我认为您需要:

.../Customers?$filter= Orders/any(o: o/Articles/any(p: p/Category eq 'Cookies'))

如果Customers的Cookie为Orders,它将为您提供所有Orders的{​​{1}}

致谢。