如何将 ODataEnumValue 转换为其 CLR 枚举类型?
How to convert ODataEnumValue into its CLR enum type?
从 FilterQueryOption
遍历表达式树时,我有一个 ODataEnumValue
的实例。我想知道如何以通用方式将其转换为相应的 CLR 枚举类型值(即无需自己查找实际的 CLR 类型)。
或许可以参考ODataEnumDeserializer的ReadInline方法,EdmModel中的ODataEnumvalue转CLR枚举类型
可以通过获取 TypeReference
的 ClrTypeAnnotation
来检索枚举类型,如下所示。首先从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);
}
...
}
从 FilterQueryOption
遍历表达式树时,我有一个 ODataEnumValue
的实例。我想知道如何以通用方式将其转换为相应的 CLR 枚举类型值(即无需自己查找实际的 CLR 类型)。
或许可以参考ODataEnumDeserializer的ReadInline方法,EdmModel中的ODataEnumvalue转CLR枚举类型
可以通过获取 TypeReference
的 ClrTypeAnnotation
来检索枚举类型,如下所示。首先从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);
}
...
}