Filter 使用ODataClient和Expand使用ODATA调用正确的URI

Filter 使用ODataClient和Expand使用ODATA调用正确的URI,filter,odata,expand,Filter,Odata,Expand,我有两个相互关联的表,我想在这两个表上使用过滤器执行一些查询(每个表一个) 我在c#中使用的控制器如下所示: var list = await client.For("T_Project") .Filter("IsQuote eq false") .Expand("T_Ref_StatusProject") .Filter("Final eq false") .FindEntriesAsy

我有两个相互关联的表,我想在这两个表上使用过滤器执行一些查询(每个表一个)

我在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


谢谢

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

http://localhost:12494/gp/T_Project?$filter=(IsQuote eq false) and (T_Ref_StatusProject/any(d:d/Final eq false))
请参见查询选项5.1.1.10.1(如有),另请参见文档中描述该概念的“寻址派生类型”

在问题的第一部分,我无法帮助您,因为我没有使用C#客户端。但是,您可以检查
Filter()
方法是否接受lambda表达式,您可以指定直接对应于扩展实体的表达式