@@ -57,32 +57,32 @@ protected override void ValidateAndPushOperand(Expression expression, Stack<stri
5757
5858 if ( binaryExpression . Right is ConstantExpression constantExpression )
5959 {
60- stack . Push ( BuildQueryPredicate ( binaryExpression . NodeType , memberExpression , constantExpression ) ) ;
60+ var constVal = ExpressionParserUtilities . GetOperandString ( constantExpression ) ;
61+ stack . Push ( BuildQueryPredicate ( binaryExpression . NodeType , memberExpression , constVal ) ) ;
6162 }
6263 else if ( binaryExpression . Right is UnaryExpression uni )
6364 {
6465 switch ( uni . Operand )
6566 {
6667 case ConstantExpression c :
67- stack . Push ( BuildQueryPredicate ( binaryExpression . NodeType , memberExpression , c ) ) ;
68+ var constVal = ExpressionParserUtilities . GetOperandString ( c ) ;
69+ stack . Push ( BuildQueryPredicate ( binaryExpression . NodeType , memberExpression , constVal ) ) ;
6870 break ;
6971 case MemberExpression mem :
70- {
7172 var val = ExpressionParserUtilities . GetOperandString ( mem ) ;
72- stack . Push ( BuildQueryPredicate ( binaryExpression . NodeType , memberExpression , System . Linq . Expressions . Expression . Constant ( val ) ) ) ;
73+ stack . Push ( BuildQueryPredicate ( binaryExpression . NodeType , memberExpression , val ) ) ;
7374 break ;
74- }
7575 }
7676 }
7777 else if ( binaryExpression . Right is MemberExpression mem )
7878 {
7979 var val = ExpressionParserUtilities . GetOperandString ( mem ) ;
80- stack . Push ( BuildQueryPredicate ( binaryExpression . NodeType , memberExpression , System . Linq . Expressions . Expression . Constant ( val ) ) ) ;
80+ stack . Push ( BuildQueryPredicate ( binaryExpression . NodeType , memberExpression , val ) ) ;
8181 }
8282 else
8383 {
8484 var val = ExpressionParserUtilities . GetOperandStringForQueryArgs ( binaryExpression . Right , new List < object > ( ) ) ; // hack - will need to revisit when integrating vectors into aggregations.
85- stack . Push ( BuildQueryPredicate ( binaryExpression . NodeType , memberExpression , System . Linq . Expressions . Expression . Constant ( val ) ) ) ;
85+ stack . Push ( BuildQueryPredicate ( binaryExpression . NodeType , memberExpression , val ) ) ;
8686 }
8787 }
8888 else if ( expression is ConstantExpression c
@@ -169,7 +169,7 @@ protected override void SplitBinaryExpression(BinaryExpression expression, Stack
169169 }
170170 }
171171
172- private static string BuildEqualityPredicate ( MemberInfo member , ConstantExpression expression , string memberStr , bool negated = false )
172+ private static string BuildEqualityPredicate ( MemberInfo member , string queryValue , string memberStr , bool negated = false )
173173 {
174174 var sb = new StringBuilder ( ) ;
175175 var fieldAttribute = member . GetCustomAttribute < SearchFieldAttribute > ( ) ;
@@ -190,13 +190,13 @@ private static string BuildEqualityPredicate(MemberInfo member, ConstantExpressi
190190 switch ( searchFieldType )
191191 {
192192 case SearchFieldType . TAG :
193- sb . Append ( $ "{{{ExpressionParserUtilities.EscapeTagField(expression.Value.ToString() )}}}") ;
193+ sb . Append ( $ "{{{ExpressionParserUtilities.EscapeTagField(queryValue )}}}") ;
194194 break ;
195195 case SearchFieldType . TEXT :
196- sb . Append ( expression . Value ) ;
196+ sb . Append ( queryValue ) ;
197197 break ;
198198 case SearchFieldType . NUMERIC :
199- sb . Append ( $ "[{ expression . Value } { expression . Value } ]") ;
199+ sb . Append ( $ "[{ queryValue } { queryValue } ]") ;
200200 break ;
201201 default :
202202 throw new InvalidOperationException ( "Could not translate query equality searches only supported for Tag, text, and numeric fields" ) ;
@@ -205,17 +205,17 @@ private static string BuildEqualityPredicate(MemberInfo member, ConstantExpressi
205205 return sb . ToString ( ) ;
206206 }
207207
208- private string BuildQueryPredicate ( ExpressionType expType , MemberExpression member , ConstantExpression constExpression )
208+ private string BuildQueryPredicate ( ExpressionType expType , MemberExpression member , string queryValue )
209209 {
210210 var memberStr = ExpressionParserUtilities . GetOperandString ( member ) ;
211211 var queryPredicate = expType switch
212212 {
213- ExpressionType . GreaterThan => $ "{ memberStr } :[({ constExpression . Value } inf]",
214- ExpressionType . LessThan => $ "{ memberStr } :[-inf ({ constExpression . Value } ]",
215- ExpressionType . GreaterThanOrEqual => $ "{ memberStr } :[{ constExpression . Value } inf]",
216- ExpressionType . LessThanOrEqual => $ "{ memberStr } :[-inf { constExpression . Value } ]",
217- ExpressionType . Equal => BuildEqualityPredicate ( member . Member , constExpression , memberStr ) ,
218- ExpressionType . NotEqual => BuildEqualityPredicate ( member . Member , constExpression , memberStr , true ) ,
213+ ExpressionType . GreaterThan => $ "{ memberStr } :[({ queryValue } inf]",
214+ ExpressionType . LessThan => $ "{ memberStr } :[-inf ({ queryValue } ]",
215+ ExpressionType . GreaterThanOrEqual => $ "{ memberStr } :[{ queryValue } inf]",
216+ ExpressionType . LessThanOrEqual => $ "{ memberStr } :[-inf { queryValue } ]",
217+ ExpressionType . Equal => BuildEqualityPredicate ( member . Member , queryValue , memberStr ) ,
218+ ExpressionType . NotEqual => BuildEqualityPredicate ( member . Member , queryValue , memberStr , true ) ,
219219 _ => string . Empty
220220 } ;
221221 return queryPredicate ;
0 commit comments