我已经构建了一个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?
答案 0 :(得分:0)
正确的格式很奇怪而且不直观,但看起来像这样:
Fully.Qualified.Enum.Type'EnumValue'
在您的示例中使用:
Level eq Log.Api.Models.Level'Error'
官方 V4 文档描述了 $filter
系统查询选项中的文字格式: