2017-02-22 46 views
0

У меня есть две таблицы, которые связаны друг с другом, и я хотел бы выполнить некоторые запросы с фильтрами на обеих таблиц (по одному для каждого)Вызов правильный URI с OData использованием ODataClient с Expand

Я использую контроллер в C#, который выглядит следующим образом:

var list = 
      await client.For("T_Project") 
      .Filter("IsQuote eq false") 
      .Expand("T_Ref_StatusProject") 
      .Filter("Final eq false") 
      .FindEntriesAsync(); 

Вот URI, который я получаю с этим кодом:

http://localhost:12494/gp/T_Project?$filter=(IsQuote eq false) and (Final eq false)&$expand=T_Ref_StatusProject 

Однако я получаю ошибку говоря плохой запрос. Я полагаю, что я хочу будет выглядеть как

http://localhost:12494/gp/T_Project?$filter=(IsQuote%20eq%20false)&$expand=T_Ref_StatusProject($filter=Final%20eq%20true) 

В результате, однако, точно так же, как если бы я не ставил какой-либо фильтр для расширения таблицы.

Так что у меня на самом деле два вопроса. Как я могу заставить его работать в моем коде C# и что это правильный синтаксис URL для него. Я полагаю, что первый ответ ответит на второй.

Мой проект UI (один с кодом образца) имеют Simple.OData.Client (5.0.0 альфа2) установлены (которые включают в себя Microsoft.Odata.Code (6.15.0)

Мой API есть Microsoft. ASPNet.Odata V5.9.1 установлен

Благодаря

ответ

0

Согласно документации OData фильтрации на вложенных свойств будет выглядеть следующим образом:

http://localhost:12494/gp/T_Project?$filter=(IsQuote eq false) and (T_Ref_StatusProject/any(d:d/Final eq false)) 

См QueryOpti 5.1.1.10.1 any, http://docs.oasis-open.org/odata/odata/v4.0/errata03/os/complete/part2-url-conventions/odata-v4.0-errata03-os-part2-url-conventions-complete.html, см. также «Адресация производных типов» в документе, который описывает концепцию в целом.

Я не могу помочь вам в первой части вашего вопроса, так как я не использую клиент C#. Но, возможно, вы можете проверить, принимает ли метод Filter() лямбда-выражение, где вы можете указать выражение, которое напрямую соответствует расширенному объекту.