Nul*_*ter 26 wcf expand filtering filter odata
我已经提供了一些Web服务来访问信息.
我试图扩展节点的第一件事.我用以下代码成功完成了这项工作
http://www.domain.com/ODataService/WorkService.svc/CaseStudies?format=json&$expand=ServiceOfferings
Run Code Online (Sandbox Code Playgroud)
现在我想过滤扩展ServiceOfferings时我将获得的ServiceOfferingID.如何对扩展集合使用过滤器选项
http://www.domain.com/ODataService/WorkService.svc/CaseStudies?format=json&$expand=ServiceOfferings&$filter=ServiceOfferings.ServiceOfferingID eq 127
Run Code Online (Sandbox Code Playgroud)
但它不起作用.做同样的事情的正确方法是什么
R. *_*urs 42
您需要编写的查询取决于扩展集合的基数.
以下是一些使用odata.org提供的公共示例OData Northwind服务的示例.
订单总是由一个客户完成.
查找具有特定名称的客户订单:http://services.odata.org/V3/Northwind/Northwind.svc/Orders?$ expand = Customer &$ filter = Customer / CompanyName eq'Vins et alcools Chevalier'.这相当于Dhawal的答案.
客户可以发出许多订单.
使用全部或任何量词 来指定您是否希望至少一个或所有订单服从您的条件.
您可以调用http://services.odata.org/V3/Northwind/Northwind.svc/$metadata并检查NavigationProperty元素,以查看存在哪些关系.
<NavigationProperty Name="Orders"
Relationship="NorthwindModel.FK_Orders_Customers"
ToRole="Orders"
FromRole="Customers"/>
Run Code Online (Sandbox Code Playgroud)
然后,查找与该名称的关联,您将找到基数:
<Association Name="FK_Orders_Customers">
<End
Type="NorthwindModel.Customer"
Role="Customers"
Multiplicity="0..1"/>
<End
Type="NorthwindModel.Order"
Role="Orders"
Multiplicity="*"/>
...
Run Code Online (Sandbox Code Playgroud)
导航这样的一对多关系:http://services.odata.org/V3/Northwind/Northwind.svc/Customers?$expand=Orders&$filter=Orders/EmployeeID eq 9,将为您提供:"The属性"EmployeeID"的属性访问的父值不是单个值.属性访问只能应用于单个值."
与所有或任何一个导航多对一关系,如http://services.odata.org/V3/Northwind/Northwind.svc/Orders?$expand=Customer&$filter=Customer/any(c:c/CompanyName eq'Vins et alcools Chevalier')将为您提供:"Any/All只能在收集后使用."
顺便说一句,all()而any()实际上是全称量词,∀()和存在量词,∃(),分别为,您可以从数学课记住.
Dha*_*wal 10
oData支持按子对象的属性进行过滤.
这是一个例子:http://services.odata.org/Northwind/Northwind.svc/Orders?$filter = Customer / Country eq'Gerden'
小智 7
可能对某人有帮助
GET serviceRoot/People?$expand=Trips($filter=Name eq 'Trip in US')
Run Code Online (Sandbox Code Playgroud)
在OData中,Filter命令仅适用于顶级元素.要使您的过滤器正常工作,您需要具有以下URL
显然,这不是您要编写的查询,而是在幕后将查询转换为表达式树,该表达式树具有基于顶级元素的根表达式.
如果您确实需要过滤数据,则可能会拦截查询并编写自己的表达式,如下所示:
[QueryInterceptor("CaseStudies")]
public Expression<Func<CaseStudie, bool>> CaseStudieFilter()
{
<Expression here>
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
50288 次 |
| 最近记录: |