@@ -59,7 +59,15 @@ protected override Expression VisitBinary(BinaryExpression node)
59
59
var left = Visit ( node . Left ) ;
60
60
var right = Visit ( node . Right ) ;
61
61
62
- var column = left is MemberExpression leftMember ? GetColumnFromMemberExpression ( leftMember ) : null ;
62
+ string ? column = null ;
63
+ if ( left is MemberExpression leftMember )
64
+ {
65
+ column = GetColumnFromMemberExpression ( leftMember ) ;
66
+ } //To handle properly if it's a Convert ExpressionType generally with nullable properties
67
+ else if ( left is UnaryExpression leftUnary && leftUnary . NodeType == ExpressionType . Convert && leftUnary . Operand is MemberExpression leftOperandMember )
68
+ {
69
+ column = GetColumnFromMemberExpression ( leftOperandMember ) ;
70
+ }
63
71
64
72
if ( column == null )
65
73
throw new ArgumentException ( $ "Left side of expression: '{ node } ' is expected to be property with a ColumnAttribute or PrimaryKeyAttribute") ;
@@ -129,7 +137,15 @@ protected override Expression VisitMethodCall(MethodCallExpression node)
129
137
/// <param name="constantExpression"></param>
130
138
private void HandleConstantExpression ( string column , Operator op , ConstantExpression constantExpression )
131
139
{
132
- Filter = new QueryFilter ( column , op , constantExpression . Value ) ;
140
+ if ( constantExpression . Type . IsEnum )
141
+ {
142
+ var enumValue = constantExpression . Value ;
143
+ Filter = new QueryFilter ( column , op , enumValue ) ;
144
+ }
145
+ else
146
+ {
147
+ Filter = new QueryFilter ( column , op , constantExpression . Value ) ;
148
+ }
133
149
}
134
150
135
151
/// <summary>
@@ -140,8 +156,8 @@ private void HandleConstantExpression(string column, Operator op, ConstantExpres
140
156
/// <param name="memberExpression"></param>
141
157
private void HandleMemberExpression ( string column , Operator op , MemberExpression memberExpression )
142
158
{
143
- Filter = new QueryFilter ( column , op , GetMemberExpressionValue ( memberExpression ) ) ;
144
- }
159
+ Filter = new QueryFilter ( column , op , GetMemberExpressionValue ( memberExpression ) ) ;
160
+ }
145
161
146
162
/// <summary>
147
163
/// A unary expression parser (i.e. => x.Id == 1 <- where both `1` is considered unary)
@@ -192,6 +208,10 @@ private void HandleNewExpression(string column, Operator op, NewExpression newEx
192
208
{
193
209
Filter = new QueryFilter ( column , op , guid . ToString ( ) ) ;
194
210
}
211
+ else if ( instance . GetType ( ) . IsEnum )
212
+ {
213
+ Filter = new QueryFilter ( column , op , instance ) ;
214
+ }
195
215
}
196
216
197
217
/// <summary>
0 commit comments