使用带有Expand的ODataClient使用ODATA调用正确的URI

时间:2017-02-22 00:35:26

标签: filter odata 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 alpha2)(包括Microsoft.Odata.Code(6.15.0)

我的API安装了Microsoft.ASPNet.Odata V5.9.1

由于

1 个答案:

答案 0 :(得分:0)

根据ODATA文档,对嵌套属性的过滤如下所示:

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

请参阅QueryOptions 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()方法是否接受lambda表达式,您可以在其中指定直接对应于展开实体的表达式。