protected override Expression VisitMethodCallExpression(MethodCallExpression methodCallExpression)
            {
                var newExpression
                    = (MethodCallExpression)base.VisitMethodCallExpression(methodCallExpression);

                if (newExpression != methodCallExpression &&
                    newExpression.Arguments.Count > 0 &&
                    newExpression.Arguments[0].Type == typeof(IValueReader))
                {
                    return
                        (_queryModelVisitor
                         .BindMethodCallToValueReader(methodCallExpression, newExpression.Arguments[0])
                         ?? newExpression);
                }

                return(_queryModelVisitor
                       .BindMethodCallExpression(
                           methodCallExpression,
                           (property, _) => Expression.Call(
                               _getValueMethodInfo.MakeGenericMethod(newExpression.Method.GetGenericArguments()[0]),
                               QueryContextParameter,
                               newExpression.Arguments[0],
                               Expression.Constant(property)))
                       ?? newExpression);
            }
            protected override Expression VisitMethodCallExpression(MethodCallExpression methodCallExpression)
            {
                var newExpression = base.VisitMethodCallExpression(methodCallExpression);

                _queryModelVisitor
                .BindMethodCallExpression(
                    methodCallExpression,
                    (property, querySource) => _querySources[querySource]--);

                return(newExpression);
            }