@@ -59,7 +59,15 @@ protected override Expression VisitBinary(BinaryExpression node)
5959 var left = Visit ( node . Left ) ;
6060 var right = Visit ( node . Right ) ;
6161
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+ }
6371
6472 if ( column == null )
6573 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)
129137 /// <param name="constantExpression"></param>
130138 private void HandleConstantExpression ( string column , Operator op , ConstantExpression constantExpression )
131139 {
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+ }
133149 }
134150
135151 /// <summary>
@@ -140,8 +156,8 @@ private void HandleConstantExpression(string column, Operator op, ConstantExpres
140156 /// <param name="memberExpression"></param>
141157 private void HandleMemberExpression ( string column , Operator op , MemberExpression memberExpression )
142158 {
143- Filter = new QueryFilter ( column , op , GetMemberExpressionValue ( memberExpression ) ) ;
144- }
159+ Filter = new QueryFilter ( column , op , GetMemberExpressionValue ( memberExpression ) ) ;
160+ }
145161
146162 /// <summary>
147163 /// 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
192208 {
193209 Filter = new QueryFilter ( column , op , guid . ToString ( ) ) ;
194210 }
211+ else if ( instance . GetType ( ) . IsEnum )
212+ {
213+ Filter = new QueryFilter ( column , op , instance ) ;
214+ }
195215 }
196216
197217 /// <summary>
0 commit comments