我提供了一些Web服务来访问信息。

我要做的第一件事就是尝试扩展一个节点。我已经成功完成了以下代码

http://www.domain.com/ODataService/WorkService.svc/CaseStudies?format=json&$expand=ServiceOfferings

现在,我想过滤在扩展ServiceOfferings时将获得的ServiceOfferingID。
如何对扩展的集合使用过滤器选项
http://www.domain.com/ODataService/WorkService.svc/CaseStudies?format=json&$expand=ServiceOfferings&$filter=ServiceOfferings.ServiceOfferingID eq 127

但是它不起作用。什么是做同样的正确方法

最佳答案

您需要编写的查询取决于扩展集合的cardinality

以下是一些使用公共(public)sample OData Northwind service, provided by odata.org的示例。

一个订单总是由一个客户完成。

查找具有特定名称的客户的订单:
http://services.odata.org/V3/Northwind/Northwind.svc/Orders?$expand=Customer&$filter=Customer/CompanyName eq 'Vins et alcools Chevalier'。这相当于达瓦的答案。

客户可以发出许多订单。

使用quantifiers 全部任何来指定您是否要至少一个或所有订单都符合您的条件。

  • 查找特定员工已处理一个或多个订单的客户:
    http://services.odata.org/V3/Northwind/Northwind.svc/Customers?$expand=Orders&$filter=Orders/any(o: o/EmployeeID eq 9)
  • 查找长时间未订购任何商品的客户:
    http://services.odata.org/V3/Northwind/Northwind.svc/Customers?$expand=Orders&$filter=Orders/all(o: o/OrderDate lt DateTime'1997-01-01')

  • 您可以调用http://services.odata.org/V3/Northwind/Northwind.svc/$metadata并检查NavigationProperty元素,以查看存在哪些关系。
    <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="*"/>
        ...
    

    像这样导航一对多关系:http://services.odata.org/V3/Northwind/Northwind.svc/Customers?$expand=Orders&$filter=Orders/EmployeeID eq 9将为您提供:“属性'EmployeeID'的属性访问的父值不是单个值。属性访问只能应用于单个值。”

    http://services.odata.org/V3/Northwind/Northwind.svc/Orders?$expand=Customer&$filter=Customer/any(c: c/CompanyName eq 'Vins et alcools Chevalier')之类的全部或任何对象进行多对一导航将为您提供:
    “任何/全部只能在收集后使用。”

    顺便说一句,all()any()实际上分别是Universal quantifier,∀()和existential quantifier,∃(),您可能在数学课上会记住它们。

    关于wcf - OData $ filter中$ expand的项目,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9171310/

    10-10 01:12