我正在使用odata查询来获取派生类型:
{{URL}} /的OData /资源?$扩大= derivedType
请参阅此link,其中提供了类似的选项 〜/ People / OfType('员工')(41)/经理或〜/ People!没有工作的员工。
Asp.Net Web Api 2是否支持EF6?什么是查询?
答案 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实例,因此只返回实例 VipCustomerhttp://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的公司,并将所有经理内联展开。