我有以下方法:LINQ ToList()抛出误差上异步方法
protected override async Task<IHttpActionResult> GetAll(QueryData query)
{
IEnumerable<Entity> entities = await _entityManager.UseRepositoryAsync(async (repo) =>
{
var fetchExpression = FetchExpression(query);
IEnumerable<Entity> found = await (fetchExpression != null ?
repo.BrowseAllAsync(fetchExpression) :
repo.BrowseAllAsync());
return found;
});
return Ok(entities.Select(e => MapToDTO(e));
}
此功能编译罚款。
但是,如果我继续在末尾添加一个ToList()
,它抛出一个错误:
Since
System.Func<XXX.Framework.Persistence.IAsyncRepository<Entity>,System.Threading.Tasks.Task>
is an async method that returnsTask
, a return keyword must not be followed by an object expression.Did you intend to return
Task<T>
?
protected override async Task<IHttpActionResult> GetAll(QueryData query)
{
IEnumerable<Entity> entities = await _entityManager.UseRepositoryAsync(async (repo) =>
{
var fetchExpression = FetchExpression(query);
IEnumerable<Entity> found = await (fetchExpression != null ?
repo.BrowseAllAsync(fetchExpression) :
repo.BrowseAllAsync());
return found.ToList(); //THROWS ERROR
});
return Ok(entities.Select(e => MapToDTO(e));
}
我无法理解的错误消息。这是怎么回事?
注意:UseRepositoryAsync
是一个重载方法,并具有以下sintax:
Task<R> UseRepositoryAsync(Func<IAsyncRepository<E>, Task<R>> operation);
Task UseRepositoryAsync(Func<IAsyncRepository<E>, Task> operation);