public virtual ProcessResult HandleContent(IQueryable queryable, ActionContext actionContext)
        {
            if (queryable == null)
            {
                throw new ArgumentNullException(nameof(queryable));
            }

            var    service        = actionContext.Service;
            var    contextHandler = service?.ContextHandler;
            object result;
            int?   inlineCount = null;

            // make before handle event callbacks
            var beforeArgs = new BeforeQueryExecuteEventArgs(actionContext, queryable);

            service?.OnBeforeHandleQuery(beforeArgs);
            contextHandler?.OnBeforeHandleQuery(beforeArgs);
            queryable = beforeArgs.Query;

            var parameters = actionContext.Parameters;

            if (parameters != null)
            {
                var parameterList = parameters as IList <BeetleParameter> ?? parameters.ToList();
                var executer      = parameterList.SingleOrDefault(b => b.Name.StartsWith("exec;"));
                if (executer != null)
                {
                    parameterList.Remove(executer);
                }

                // handle query
                var handledQuery = HandleQuery(queryable, parameterList);
                beforeArgs.Query = handledQuery.Query;

                // make before execute callbacks
                service?.OnBeforeQueryExecute(beforeArgs);
                contextHandler?.OnBeforeQueryExecute(beforeArgs);
                queryable = beforeArgs.Query;

                // get in-line count
                if (handledQuery.InlineCountQuery != null)
                {
                    inlineCount = Queryable.Count((dynamic)handledQuery.InlineCountQuery);
                }

                // execute query
                if (executer != null)
                {
                    result = HandleExecuter(queryable, executer);
                }
                else
                {
                    queryable = ValidateQuery(actionContext, queryable, handledQuery.TakeCount, service, contextHandler);
                    result    = Enumerable.ToList((dynamic)queryable);
                }
            }
            else
            {
                // make before execute callbacks
                service?.OnBeforeQueryExecute(beforeArgs);
                contextHandler?.OnBeforeQueryExecute(beforeArgs);
                queryable = beforeArgs.Query;

                queryable = ValidateQuery(actionContext, queryable, null, service, contextHandler);
                result    = Enumerable.ToList((dynamic)queryable);
            }

            // make after execute callbacks
            var afterArgs = new AfterQueryExecuteEventArgs(actionContext, queryable, result, beforeArgs.UserData);

            service?.OnAfterQueryExecute(afterArgs);
            contextHandler?.OnAfterQueryExecute(afterArgs);
            result = afterArgs.Result;
            var userData = afterArgs.UserData;

            return(new ProcessResult(actionContext)
            {
                Result = result, InlineCount = inlineCount, UserData = userData
            });
        }