【发布时间】:2014-10-18 20:53:21
【问题描述】:
OData V4 支持枚举,但您似乎只能通过命名空间进行搜索。现在如何通过值而不是文本表示进行搜索?
在 odata 的 V3 中,您可以查询 $filter=Status eq 35,其中 35 在枚举中是 Complete。即使该字段是数据模型中的枚举字段,此方法也可以使用。
现在这个方法在 V4 中失败了,而是需要具有枚举文本表示的命名空间。
我希望在不丢失 odata V4 的其他功能的情况下再次获得对 V3 的支持。通过枚举项的 int 值搜索似乎比搜索文本更可靠。旧的 odata 客户端(例如 kendo)不支持逐文本枚举过滤方法。
【问题讨论】:
-
我对 V3 不是很熟悉,但据我所知,如果 Status 是枚举,我认为不支持 $filter=Status eq 35。如果我错了,您能否提供规范或示例的链接?
-
OData V3 对枚举一无所知,因此它可以按照您的预期工作,您只需将整数值传递到枚举值后面,就可以得到过滤器。新实现的问题在于,绑定到枚举或存储为 int 的数据库值的组合框无法过滤,因为它们不可能知道命名空间和值,它们只知道 int。因此,我试图找到一种通过 int 而不是命名空间枚举值 $filter 的方法,因为这是需要支持的非常常见的场景。如果 V4 不支持它,我会认为它是一个错误。
-
要求命名空间前缀的另一个问题是,当枚举被移动到另一个命名空间(例如作为重构的一部分)时,API 会中断。如果可以的话,我能想到的唯一解决方法是在 EDM 模型中将枚举属性建模为
int。
标签: asp.net-web-api odata