I convertire alcuni dati da un WinGrid a un'espressione, per filtrare alcuni output all'utente. Ho una raccolta iniziale (di MyObjectType), applico alcuni filtri dinamici e ottengo una raccolta filtrata.Linq Espressioni: L'operatore binario Equal non è definito per i tipi 'MyEnum' e 'System.Enum'
Ho tuttavia problemi con una proprietà di enumerazione di MyObjectType.
l'enumerazione è un censimento norma
Public Enum MyEnum
A
B
C
End Enum
questo è come ottengo l'espressione:
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
quindi la seguente eccezione si verifica:
L'operatore binario Equal non è definito per i tipi "MyEnum" e "System.Enum".
a System.Linq.Expressions.Expression.GetEqualityComparisonOperator (ExpressionType binaryType, String opname, Espressione sinistra, espressione giusta, booleano liftToNull) a System.Linq.Expressions.Expression.Equal (Espressione a sinistra, giusta espressione)
PS.
ho osservato che se faccio
expr = Expression.Equal(objectPropertyParam,
Expression.Convert(constantExpression, GetType(MyEnum)))
Questo funziona, ma mi piacerebbe piacerebbe non specity ogni tipo di enumerazioni come questo, perché è una funzione generica !?
Non puoi usare l'operatore 'Is'? – Teejay
'Is' ?! non è usato con le espressioni, ma tra gli oggetti – serhio
Spiacente, in realtà non è chiaro cosa stai cercando di raggiungere – Teejay