Asp.net web api 如何将ODataEnumValue转换为其CLR枚举类型?

Asp.net web api 如何将ODataEnumValue转换为其CLR枚举类型?,asp.net-web-api,odata,Asp.net Web Api,Odata,从FilterQueryOption遍历表达式树时,我有一个ODataEnumValue的实例。我想知道如何以通用方式将其转换为相应的CLR枚举类型值(即,无需自己查找实际的CLR类型)。也许您可以参考的ReadInline方法,如果ODataEnumvalue位于EdmModel中,则将其转换为CLR枚举类型。可以通过获取TypeReference的CLRType注释来检索枚举类型,如下所示。首先从过滤器查询选项实例获取模型: IEdmModel _model = filterQueryOpt

FilterQueryOption
遍历表达式树时,我有一个
ODataEnumValue
的实例。我想知道如何以通用方式将其转换为相应的CLR枚举类型值(即,无需自己查找实际的CLR类型)。

也许您可以参考的ReadInline方法,如果ODataEnumvalue位于EdmModel中,则将其转换为CLR枚举类型。

可以通过获取
TypeReference
CLRType注释来检索枚举类型,如下所示。首先从
过滤器查询选项
实例获取模型:

IEdmModel _model = filterQueryOption.Context.Model;
然后,稍后在解析其
过滤器克劳斯
时,例如对于
常量节点

    private object GetClrValue(ConstantNode constantNode)
    {
        ODataEnumValue enumValue;
        ...
        else if ((enumValue = constantNode.Value as ODataEnumValue) != null)
        {
            var annotation = _model.GetAnnotationValue<ClrTypeAnnotation>(constantNode.TypeReference.Definition);
            Type enumType = annotation.ClrType;
            parameterValue = Enum.Parse(enumType, enumValue.Value);
        }
        ...
    }
私有对象GetClrValue(ConstantNode ConstantNode)
{
ODataEnumValue枚举值;
...
else如果((enumValue=constantNode.Value作为ODataEnumValue)!=null)
{
var annotation=\u model.GetAnnotationValue(constantNode.TypeReference.Definition);
类型enumType=annotation.ClrType;
parameterValue=Enum.Parse(enumType,enumValue.Value);
}
...
}

我没有反序列化上下文。我正在尝试从使用
ODataQueryOptions
ODataController
中创建的
FilterQueryOption
实例检索CLR枚举类型。