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)); }