ユーザーに出力をフィルタリングするために、WinGridのデータの一部を式に変換します。 (MyObjectTypeの)初期コレクションがあり、いくつかの動的フィルタを適用し、フィルタリングされたコレクションを取得します。Linq式: 'MyEnum'と 'System.Enum'の型に2進演算子Equalが定義されていません
ただし、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.Equal(左式 、式右の System.Linq.Expressions.Expression.GetEqualityComparisonOperator(ExpressionType binaryType、文字列OPNAME、左式、右の数式、ブール liftToNull)で
)
PS。
は私が観察され、私がしなければ
expr = Expression.Equal(objectPropertyParam,
Expression.Convert(constantExpression, GetType(MyEnum)))
これは作品が、私は一般的な機能であるため、このような列挙型の各タイプをspecityいないたいと思います!
'Is'演算子を使用できませんか? – Teejay
'Is' ?!式ではなく、オブジェクトの間で使用されます – serhio
申し訳ありませんが、実際にあなたが達成しようとしていることは明確ではありません – Teejay