OData - вложенный $ фильтр для коллекции в $ развернуть - PullRequest
0 голосов
/ 22 мая 2019

Как и в этом примере, я бы хотел отфильтровать коллекцию в «Порядке». 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 ... / Клиенты? $ Expand = Orders ($ filter = Articles / Category eq 'Cookies') , я получу сообщение об ошибке

Родительским значением для доступа к свойству «Категория» не является единственное значение. Доступ к собственности может быть применен только к одному значению.

Но я могу использовать такую ​​конструкцию, как: ... / Клиенты? $ Expand = Orders ($ filter = Articles / any (a: a / Category eq 'Cookies')) *

Проблема с any или all заключается в том, что он фильтрует данные о паранте, основываясь на дочерних элементах. После того, как «статьи» с «категорией» существуют, будут возвращены все статьи. Но я хочу уменьшить дочерние элементы, чтобы показывать только статьи категории «cookie».

1 Ответ

0 голосов
/ 22 мая 2019

Я думаю, что вам нужно использовать два разных вложенных any, если я вас понимаю, вы хотите отфильтровать все Articles они в категории Cookies, я думаю, вам нужно что-то вроде:

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

это даст вам все Customers, которые имеют Orders, если Orders имеют куки Articles.

Привет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...