Я конвертирую некоторые данные из WinGrid в выражение, чтобы отфильтровать некоторый вывод для пользователя. У меня есть первоначальная коллекция (MyObjectType), я применяю некоторые динамические фильтры, и я получаю отфильтрованную коллекцию.Linq Выражения: двоичный оператор Equal не определен для типов «MyEnum» и «System.Enum»
У меня проблемы с перечислением - свойство 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
тогда следующее исключение происходит:
Бинарный оператор, равный не для типов «MyEnum» и «System.Enum».
на System.Linq.Expressions.Expression.GetEqualityComparisonOperator (ExpressionType binaryType, String opName, Expression слева, выражение права, Boolean liftToNull) в System.Linq.Expressions.Expression.Equal (Expression влево, вправо Expression)
PS.
Я заметил, что если я
expr = Expression.Equal(objectPropertyParam,
Expression.Convert(constantExpression, GetType(MyEnum)))
Это Работает, но я бы хотел не specity каждого типа перечислений, как это, потому что это общая функция !?
Не можете ли вы использовать оператор 'Is'? – Teejay
'Is' ?! не используется с выражениями, а между объектами – serhio
Извините, на самом деле непонятно, чего вы пытаетесь достичь. – Teejay