指定枚举的ODATA过滤器的格式

时间:2018-03-23 20:20:36

标签: c# odata

我已经构建了一个EdmModel,它包含一个枚举属性Level

var level = new EdmEnumType("Log.Api.Models",
                            "Level",
                            EdmPrimitiveTypeKind.Int32,
                            false);
level.AddMember(new EdmEnumMember(level, "Debug", new EdmIntegerConstant(0)));
level.AddMember(new EdmEnumMember(level, "Error", new EdmIntegerConstant(1)));
level.AddMember(new EdmEnumMember(level, "Info", new EdmIntegerConstant(2)));
Model.AddElement(level);

// add a property, named 'Level', of type 'Level'
logEntry.AddProperty(new EdmStructuralProperty(logEntry,
                                               "Level",
                                               new EdmEnumTypeReference(level, false)));

然后使用

在C#中解析OData请求
ODataUriParser.ParseFilter(filter,
                           Model,
                           (IEdmSchemaType) schemaElmnt);

但是我发送一个指定枚举值的请求到目前为止还没有成功。我尝试过完全合格的枚举......

"Level eq Log.Api.Models.Level.Error"

没有

"Level eq Error"

我已经尝试用单引号将其括起来

"Level eq 'Error'"

异常消息是

  

检测到具有不兼容类型的二元运算符。找到了操作数   类型'Log.Api.Models.Level'和'Edm.String'用于运算符类型   '等于''。

格式正确是什么?或问题出在我的EdmModel?

1 个答案:

答案 0 :(得分:0)

正确的格式很奇怪而且不直观,但看起来像这样:

Fully.Qualified.Enum.Type'EnumValue'

在您的示例中使用:

Level eq Log.Api.Models.Level'Error'

官方 V4 文档描述了 $filter 系统查询选项中的文字格式:

http://docs.oasis-open.org/odata/odata/v4.0/errata03/os/complete/part2-url-conventions/odata-v4.0-errata03-os-part2-url-conventions-complete.html#_Toc371341809