oData $扩展派生类型

时间:2016-03-04 18:36:24

标签: entity-framework asp.net-web-api odata

我正在使用odata查询来获取派生类型:

{{URL}} /的OData /资源?$扩大= derivedType

请参阅此link,其中提供了类似的选项 〜/ People / OfType('员工')(41)/经理或〜/ People!没有工作的员工。

Asp.Net Web Api 2是否支持EF6?什么是查询?

2 个答案:

答案 0 :(得分:2)

这是OData 4.0惯例文档的一部分:

  

标识集合的任何资源路径或路径表达式   实体或复杂类型实例可以附加路径段   包含从声明的类型派生的类型的限定名称   的集合。结果将仅限于   派生类型,可能是空的。任何资源路径或路径表达式   可以附加标识单个实体或复杂类型实例   包含包含派生类型的限定名称的路径段   来自已识别资源的声明类型。如果用于   资源路径和标识的资源不是该实例   派生类型,请求将导致404 Not Found响应。如果   用在路径表达式中,该表达式是布尔表达式的一部分   type cast将评估为null。示例30:实体集限制为   VipCustomer实例

     

<强> http://host/service/Customers/Model.VipCustomer   
例31:实体   限制为VipCustomer实例,导致404 Not Found if   密钥1的客户不是VipCustomer

     

<强> http://host/service/Customers/Model.VipCustomer(1)   http://host/service/Customers(1)/Model.VipCustomer   
例32:演员   复杂属性Address到其派生类型DETAILEDAddress,然后   获取派生类型的属性

     

<强> http://host/service/Customers(1)/Address/Model.DetailedAddress/Location   
例33:使用类型转换过滤表达式;将评估为null   对于所有非VipCustomer实例,因此只返回实例   VipCustomer

     

http://host/service/Customers?$ filter = Model.VipCustomer / PercentageOfVipPromotionProductsOrdered gt   80 示例34:仅在单个相关客户为a时展开   Model.VipCustomer的实例。仅适用于多人关系   Model.VipCustomer实例将被内联,

     

<强> http://host/service/Orders?$扩大=用户/ Model.VipCustomer

答案 1 :(得分:0)

该博客文章中的信息已过期。官方OData规范可在http://www.odata.org/documentation/获得。

在OData v4中,您可以通过将派生类型的完全限定名称附加到资源URI路径来filter by derived type。例如,GET http://host/Employees/MyService.Manager将检索也是Managers的Employees子集(假设Manager是从Employee类型派生的)。最后一个路径段中的前缀MyService是OData名称空间,其中定义了Manager类型。

通过将派生类型的完全限定名称附加到$expand子句中的属性名称,您还可以在expanding a navigation property时按派生类型进行过滤。例如,GET http://host/Companies('Acme')?$expand=Employees/MyService.Manager将检索名为Acme的公司,并将所有经理内联展开。