Wcf OData$过滤器,在$expand中包含项目
我提供了一些web服务来访问信息 我要做的第一件事就是尝试展开一个节点。我用下面的代码成功地做到了这一点Wcf OData$过滤器,在$expand中包含项目,wcf,filter,filtering,odata,expand,Wcf,Filter,Filtering,Odata,Expand,我提供了一些web服务来访问信息 我要做的第一件事就是尝试展开一个节点。我用下面的代码成功地做到了这一点 http://www.domain.com/ODataService/WorkService.svc/CaseStudies?format=json&$expand=ServiceOfferings 现在,我想筛选扩展ServiceOffices时将获得的ServiceOfferingID。 如何对扩展的集合使用筛选器选项 http://www.domain.com/ODataSe
http://www.domain.com/ODataService/WorkService.svc/CaseStudies?format=json&$expand=ServiceOfferings
现在,我想筛选扩展ServiceOffices时将获得的ServiceOfferingID。
如何对扩展的集合使用筛选器选项
http://www.domain.com/ODataService/WorkService.svc/CaseStudies?format=json&$expand=ServiceOfferings&$filter=ServiceOfferings.ServiceOfferingID eq 127
但它不起作用。在OData中执行相同操作的正确方法是什么?Filter命令仅适用于顶级元素。要使过滤器正常工作,您需要具有以下URL
http://www.example.com/ODataService/WorkService.svc/CaseStudies(x) /ServiceOffices?format=json&$filter=ServiceOfferingID eq 127
显然,这不是您试图编写的查询,但在幕后,您的查询将转换为一个表达式树,该表达式树具有基于顶级元素的根表达式
如果确实需要筛选数据,则可以截取查询并编写自己的表达式,如下所示:
[QueryInterceptor("CaseStudies")]
public Expression<Func<CaseStudie, bool>> CaseStudieFilter()
{
<Expression here>
}
[QueryInterceptor(“案例研究”)]
公共表达式CaseStudieFilter()
{
}
您也可以通过服务上的webget来实现这一点。我不得不做一些类似于按属性的属性过滤的事情。oData支持按子对象的属性过滤
以下是一个例子:
您需要编写的查询取决于扩展集合的类型 下面是一些使用公共资源的示例 订单总是由一个客户完成 查找具有特定名称的客户的订单: . 这相当于达瓦尔的答案 客户可以发出许多订单 使用all或any指定您是否希望至少一个或所有命令遵守您的条件
<NavigationProperty Name="Orders"
Relationship="NorthwindModel.FK_Orders_Customers"
ToRole="Orders"
FromRole="Customers"/>
然后,查找与该名称的关联,您将找到基数:
<Association Name="FK_Orders_Customers">
<End
Type="NorthwindModel.Customer"
Role="Customers"
Multiplicity="0..1"/>
<End
Type="NorthwindModel.Order"
Role="Orders"
Multiplicity="*"/>
...
,将给出:“属性'EmployeeID'的属性访问的父值不是单个值。属性访问只能应用于单个值。”
使用all或any(如)导航多对一关系将为您提供:
“任何/全部只能在集合之后使用。”
顺便说一下,all()
和any()
实际上是,∀()和,∃(),这可能是你在数学课上记得的。可能对某人有帮助
GET serviceRoot/People?$expand=Trips($filter=Name eq 'Trip in US')
@nil如果你读到他们实际上谈论的是在扩展上过滤的问题,这是我的answeer解决的问题,这不同于在复杂类型上过滤,因此,尽管你可能会说这不是真的,但它适用于扩展简短回答:将点改为斜线,也就是说,和$filter=ServiceOffices/ServiceOfferingID eq 127
应该可以工作。你知道使用Simple.OData.Client
是否可以实现这一点吗?你熟悉Simple.OData.Client
?我很好奇它是否支持过滤扩展。