public TResult Execute <TResult>(Expression expression)
        {
            var q = _root.GetQueryable(_queryableExpression);

            if (_enumerableRootObject == null)
            {
                if (expression is MethodCallExpression m)
                {
                    var args = m.Arguments.ToArray();
                    var type = _root.GetType();
                    if (_queryableExpression != null)
                    {
                        type = _queryableExpression.Type;
                    }
                    if (type.IsGenericType)
                    {
                        type = type.GetGenericArguments()[0];
                    }
                    args[0]    = Expression.Call(null, FullDbUtility.GetOfTypeMethod(type), Expression.Constant(q));
                    expression = m.Update(null, args);
                }
            }
            else
            {
                expression = _enumerableRootObject.GetEnumerableExpression(q);
            }
            return(ExecuteExpression <TResult>(expression));
        }