88using System . Reflection ;
99using System . Runtime . CompilerServices ;
1010using System . Collections . Concurrent ;
11+ using System . Collections . ObjectModel ;
12+ using System . ComponentModel ;
1113
1214namespace Nest . Resolvers
1315{
@@ -130,9 +132,12 @@ protected override Expression VisitMethodCall(MethodCallExpression m, Stack<stri
130132 {
131133 if ( m . Method . Name == "Suffix" && m . Arguments . Any ( ) )
132134 {
133- var constantExpression = m . Arguments . Last ( ) as ConstantExpression ;
134- if ( constantExpression != null )
135- stack . Push ( constantExpression . Value as string ) ;
135+ VisitConstantOrVariable ( m , stack ) ;
136+ var callingMember = new ReadOnlyCollection < Expression > (
137+ new List < Expression > { { m . Arguments . First ( ) } }
138+ ) ;
139+ base . VisitExpressionList ( callingMember , stack , properties ) ;
140+ return m ;
136141 }
137142 else if ( m . Method . Name == "FullyQualified" && m . Arguments . Any ( ) )
138143 {
@@ -152,16 +157,11 @@ protected override Expression VisitMethodCall(MethodCallExpression m, Stack<stri
152157 {
153158 return base . VisitMethodCall ( m , stack , properties ) ;
154159 }
155- var lastArg = m . Arguments . Last ( ) ;
156- var constantExpression = lastArg as ConstantExpression ;
157- var value = constantExpression != null
158- ? constantExpression . Value . ToString ( )
159- : Expression . Lambda ( lastArg ) . Compile ( ) . DynamicInvoke ( ) . ToString ( ) ;
160- stack . Push ( value ) ;
160+ VisitConstantOrVariable ( m , stack ) ;
161161 Visit ( m . Object , stack , properties ) ;
162162 return m ;
163163 }
164- if ( IsLinqOperator ( m . Method ) )
164+ else if ( IsLinqOperator ( m . Method ) )
165165 {
166166 for ( int i = 1 ; i < m . Arguments . Count ; i ++ )
167167 {
@@ -172,6 +172,16 @@ protected override Expression VisitMethodCall(MethodCallExpression m, Stack<stri
172172 }
173173 return base . VisitMethodCall ( m , stack , properties ) ;
174174 }
175+
176+ private static void VisitConstantOrVariable ( MethodCallExpression m , Stack < string > stack )
177+ {
178+ var lastArg = m . Arguments . Last ( ) ;
179+ var constantExpression = lastArg as ConstantExpression ;
180+ var value = constantExpression != null
181+ ? constantExpression . Value . ToString ( )
182+ : Expression . Lambda ( lastArg ) . Compile ( ) . DynamicInvoke ( ) . ToString ( ) ;
183+ stack . Push ( value ) ;
184+ }
175185
176186 private static bool IsLinqOperator ( MethodInfo method )
177187 {
0 commit comments