/// <inheritdoc/>
        public async ValueTask <TResult> ExecuteAsync <TResult>(SystemLinq.Expression expression, CancellationToken cancellation)
        {
            if (typeof(TResult).Implements(typeof(IAsyncEnumerable <>), out var genericArguments))
            {
                var resultItemType = genericArguments[0];

                ExpressionHelper.CheckExpressionResultType <TResult>(expression);

                cancellation.ThrowIfCancellationRequested();
                var rlinq = ExpressionHelper.TranslateExpression(expression, _context);

                cancellation.ThrowIfCancellationRequested();

                if (_asyncStreamProvider is not null)
                {
                    var transferItemStream = _asyncStreamProvider(rlinq, cancellation);
                    var mappedResultStream = MapAsyncEnumerable <TResult>(resultItemType, transferItemStream, cancellation);
                    return(mappedResultStream);
                }

                var transferRecords = await _asyncDataProvider !(rlinq, cancellation).ConfigureAwait(false);
                var mappedResult    = await _resultMapper.MapResultAsync <TResult>(transferRecords, expression, cancellation).ConfigureAwait(false);

                return(mappedResult);
            }
            else
            {
                ExpressionHelper.CheckExpressionResultType <ValueTask <TResult> >(expression);

                cancellation.ThrowIfCancellationRequested();
                var rlinq = ExpressionHelper.TranslateExpression(expression, _context);

                if (_asyncDataProvider is not null)
                {
                    var transferData = await _asyncDataProvider(rlinq, cancellation).ConfigureAwait(false);

                    var mappedResult = await _resultMapper.MapResultAsync <TResult>(transferData, expression, cancellation).ConfigureAwait(false);

                    return(mappedResult);
                }

                var transferStream     = _asyncStreamProvider !(rlinq, cancellation);
                var mappedStreamResult = await MapSingleElementStream <TResult>(transferStream, cancellation).ConfigureAwait(false);

                return(mappedStreamResult);
            }
        }