@@ -252,28 +252,27 @@ private static ICriterion Le(ProjectionInfo property, object value)
252
252
/// </summary>
253
253
public static object FindValue ( Expression expression )
254
254
{
255
+ object findValue ( Expression e ) => e != null ? FindValue ( e ) : null ;
256
+
255
257
switch ( expression . NodeType )
256
258
{
257
259
case ExpressionType . Constant :
258
260
var constantExpression = ( ConstantExpression ) expression ;
259
261
return constantExpression . Value ;
260
262
case ExpressionType . MemberAccess :
261
263
var memberExpression = ( MemberExpression ) expression ;
262
- object getObj ( ) => memberExpression . Expression != null ? FindValue ( memberExpression . Expression ) : null ;
263
-
264
264
switch ( memberExpression . Member . MemberType )
265
265
{
266
266
case MemberTypes . Field :
267
- return ( ( FieldInfo ) memberExpression . Member ) . GetValue ( getObj ( ) ) ;
267
+ return ( ( FieldInfo ) memberExpression . Member ) . GetValue ( findValue ( memberExpression . Expression ) ) ;
268
268
case MemberTypes . Property :
269
- return ( ( PropertyInfo ) memberExpression . Member ) . GetValue ( getObj ( ) ) ;
269
+ return ( ( PropertyInfo ) memberExpression . Member ) . GetValue ( findValue ( memberExpression . Expression ) ) ;
270
270
}
271
271
break ;
272
272
case ExpressionType . Call :
273
273
var methodCallExpression = ( MethodCallExpression ) expression ;
274
274
var args = methodCallExpression . Arguments . ToArray ( arg => FindValue ( arg ) ) ;
275
-
276
- var callingObject = methodCallExpression . Object == null ? null : FindValue ( methodCallExpression . Object ) ;
275
+ var callingObject = findValue ( methodCallExpression . Object ) ;
277
276
return methodCallExpression . Method . Invoke ( callingObject , args ) ;
278
277
case ExpressionType . Convert :
279
278
var unaryExpression = ( UnaryExpression ) expression ;
0 commit comments