@@ -57,32 +57,32 @@ protected override void ValidateAndPushOperand(Expression expression, Stack<stri
57
57
58
58
if ( binaryExpression . Right is ConstantExpression constantExpression )
59
59
{
60
- stack . Push ( BuildQueryPredicate ( binaryExpression . NodeType , memberExpression , constantExpression ) ) ;
60
+ var constVal = ExpressionParserUtilities . GetOperandString ( constantExpression ) ;
61
+ stack . Push ( BuildQueryPredicate ( binaryExpression . NodeType , memberExpression , constVal ) ) ;
61
62
}
62
63
else if ( binaryExpression . Right is UnaryExpression uni )
63
64
{
64
65
switch ( uni . Operand )
65
66
{
66
67
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 ) ) ;
68
70
break ;
69
71
case MemberExpression mem :
70
- {
71
72
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 ) ) ;
73
74
break ;
74
- }
75
75
}
76
76
}
77
77
else if ( binaryExpression . Right is MemberExpression mem )
78
78
{
79
79
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 ) ) ;
81
81
}
82
82
else
83
83
{
84
84
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 ) ) ;
86
86
}
87
87
}
88
88
else if ( expression is ConstantExpression c
@@ -169,7 +169,7 @@ protected override void SplitBinaryExpression(BinaryExpression expression, Stack
169
169
}
170
170
}
171
171
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 )
173
173
{
174
174
var sb = new StringBuilder ( ) ;
175
175
var fieldAttribute = member . GetCustomAttribute < SearchFieldAttribute > ( ) ;
@@ -190,13 +190,13 @@ private static string BuildEqualityPredicate(MemberInfo member, ConstantExpressi
190
190
switch ( searchFieldType )
191
191
{
192
192
case SearchFieldType . TAG :
193
- sb . Append ( $ "{{{ExpressionParserUtilities.EscapeTagField(expression.Value.ToString() )}}}") ;
193
+ sb . Append ( $ "{{{ExpressionParserUtilities.EscapeTagField(queryValue )}}}") ;
194
194
break ;
195
195
case SearchFieldType . TEXT :
196
- sb . Append ( expression . Value ) ;
196
+ sb . Append ( queryValue ) ;
197
197
break ;
198
198
case SearchFieldType . NUMERIC :
199
- sb . Append ( $ "[{ expression . Value } { expression . Value } ]") ;
199
+ sb . Append ( $ "[{ queryValue } { queryValue } ]") ;
200
200
break ;
201
201
default :
202
202
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
205
205
return sb . ToString ( ) ;
206
206
}
207
207
208
- private string BuildQueryPredicate ( ExpressionType expType , MemberExpression member , ConstantExpression constExpression )
208
+ private string BuildQueryPredicate ( ExpressionType expType , MemberExpression member , string queryValue )
209
209
{
210
210
var memberStr = ExpressionParserUtilities . GetOperandString ( member ) ;
211
211
var queryPredicate = expType switch
212
212
{
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 ) ,
219
219
_ => string . Empty
220
220
} ;
221
221
return queryPredicate ;
0 commit comments