如何将 ODataEnumValue 转换为其 CLR 枚举类型?

How to convert ODataEnumValue into its CLR enum type?

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

或许可以参考ODataEnumDeserializer的ReadInline方法,EdmModel中的ODataEnumvalue转CLR枚举类型

可以通过获取 TypeReferenceClrTypeAnnotation 来检索枚举类型,如下所示。首先从FilterQueryOption实例中获取模型:

IEdmModel _model = filterQueryOption.Context.Model;

然后,稍后在解析其 FilterClause 时,例如 ConstantNode:

    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);
        }
        ...
    }