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