Tôi chuyển đổi một số dữ liệu từ WinGrid thành biểu thức, để lọc một số đầu ra cho người dùng. Tôi có một bộ sưu tập ban đầu (của MyObjectType), tôi áp dụng một số bộ lọc động và tôi có được một bộ sưu tập được lọc.Biểu thức LINQ: Toán tử nhị phân Bằng không được định nghĩa cho các kiểu 'MyEnum' và 'System.Enum'
Tôi gặp sự cố với thuộc tính liệt kê - thuộc tính của MyObjectType.
kiểu liệt kê là một liệt kê tiêu chuẩn
Public Enum MyEnum
A
B
C
End Enum
đây là làm thế nào tôi có được các biểu hiện:
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
thì ngoại lệ sau đây xảy ra:
Nhà điều hành nhị phân bình đẳng không phải là được định nghĩa cho các loại 'MyEnum' và 'System.Enum'.
tại System.Linq.Expressions.Expression.GetEqualityComparisonOperator (ExpressionType binaryType, String opName, Expression trái, biểu đúng, Boolean liftToNull) tại System.Linq.Expressions.Expression.Equal (Biểu trái, biểu đúng)
PS.
tôi quan sát thấy rằng nếu tôi làm
expr = Expression.Equal(objectPropertyParam,
Expression.Convert(constantExpression, GetType(MyEnum)))
này Làm việc, nhưng tôi muốn muốn không specity từng loại enumerations như thế này, vì là một chức năng chung !?
Bạn không thể sử dụng toán tử 'Is'? – Teejay
'Is' ?! không được sử dụng với các biểu thức, nhưng giữa các đối tượng – serhio
Xin lỗi, nó thực sự không rõ ràng những gì bạn đang cố gắng để đạt được – Teejay