Jam*_*ock 6 odata asp.net-web-api
OData V4具有枚举支持,但似乎您只能通过命名空间进行搜索.现在如何通过值而不是文本表示来搜索?
在OData的可以查询V3 $filter=Status eq 35,这里35是Complete在枚举.即使该字段是数据模型中的枚举字段,此方法也可以使用.
现在,此方法在V4中失败,而是要求命名空间具有枚举的文本表示.
我想让V3支持再次运行,而不必失去odata V4的其他功能.按枚举项的int值搜索似乎比搜索文本更可靠.较旧的odata客户端(例如kendo)不支持按字节枚举过滤方法.
Cht*_*lek 16
要在OData v4中执行此操作,我们可以在初始webapi配置中启用EnumPrefixFree,因此我们不必将完整的枚举命名空间编写为前缀:
public static void Register(HttpConfiguration config)
{
// ...
config.EnableEnumPrefixFree(enumPrefixFree: true);
config.MapODataServiceRoute("odata", "odata", YourEdmModem);
// ...
}
Run Code Online (Sandbox Code Playgroud)
然后,我们可以通过String或Int值过滤任何枚举:
$filter=Status eq 'single'
Run Code Online (Sandbox Code Playgroud)
要么
$filter=Status eq 1
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助.
使用v4,您必须添加名称空间作为前缀并使用单引号括起值,例如http://services.odata.org/V4/(S(m1bhpaebr1yvzx5vtz5v4ur1))/TripPinServiceRW/People?$ filter = Gender% 20eq%20Microsoft.OData.SampleService.Models.TripPin.PersonGender'1',其中1表示女性.
以下是协议http://docs.oasis-open.org/odata/odata/v4.0/os/abnf/odata-abnf-construction-rules.txt的ABNF引文:
enum = qualifiedEnumTypeName SQUOTE enumValue SQUOTE
enumValue = singleEnumValue *( COMMA singleEnumValue )
singleEnumValue = enumerationMember / enumMemberValue
enumMemberValue = int64Value
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7647 次 |
| 最近记录: |