我将一些数据从WinGrid转换为表达式,以便将一些输出过滤到用户.
我有一个初始集合(MyObjectType),我应用了一些动态过滤器,我获得了一个过滤集合.
我有一个初始集合(MyObjectType),我应用了一些动态过滤器,我获得了一个过滤集合.
枚举是标准枚举
Public Enum MyEnum A B C End Enum
这是我获取表达式的方式:
Dim constantExpression As ConstantExpression If TypeOf Value Is [Enum] Then constantExpression = Expression.Constant(Value,GetType([Enum])) Else constantExpression = Expression.Constant(Value,Value.GetType()) End If ... Dim expr As Expression = nothing Dim objectPropertyParam = Expression.Property(objectParam,objectPropertyName) Select Case Me.Operation Case Comparisonoperator.Contains,Comparisonoperator.NotContains ... Case Comparisonoperator.NotEqual ... Case Comparisonoperator.Equal ' THE EXCEPTION IS HERE --------------------------------------- expr = Expression.Equal(objectPropertyParam,constantExpression) Case Comparisonoperator.GreatherThanorEqual expr = Expression.GreaterThanorEqual(objectPropertyParam,constantExpression) Case Comparisonoperator.LessthanorEqual expr = Expression.LessthanorEqual(objectPropertyParam,constantExpression) End Select
然后发生以下异常:
The binary operator Equal is not defined for the types ‘MyEnum’ and
‘System.Enum’.at
System.Linq.Expressions.Expression.GetEqualityComparisonoperator(ExpressionType
binaryType,String opName,Expression left,Expression right,Boolean
liftToNull) at System.Linq.Expressions.Expression.Equal(Expression
left,Expression right)
PS.
我观察到如果我这样做
expr = Expression.Equal(objectPropertyParam,Expression.Convert(constantExpression,GetType(MyEnum)))
解决方法
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。