Я преобразовываю некоторые данные из 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
то возникает следующее исключение:
Бинарный оператор Equal не определен для типов MyEnum и System.Enum.
at System.Linq.Expressions.Expression.GetEqualityComparisonOperator(ExpressionType binaryType, String opName, Выражение слева, Выражение справа, Boolean liftToNull) at System.Linq.Expressions.Expression.Equal(Выражение слева, Выражение справа)
PS.
Я заметил, что если я сделаю
expr = Expression.Equal(objectPropertyParam,
Expression.Convert(constantExpression, GetType(MyEnum)))
Это работает, но я бы не хотел указывать каждый тип подобных перечислений, потому что это общая функция!?
Is
? - person Teejay   schedule 03.05.2013Is
?! используется не с выражениями, а между объектами - person serhio   schedule 03.05.2013Value
,objectParam
иobjectPropertyName
? Кроме того, в стороне, VB не C # - регистр не учитывается, поэтомуDim constantExpression As ConstantExpression
- нет-нет. Это работает, но вы скрываетеConstantExpression
для остальной части контекста. - person J...   schedule 03.05.2013If TypeOf Value Is [Enum]
? Я думаю, что это то, что вызывает вашу проблему. - person svick   schedule 03.05.2013