C# C自动映射,无法隐式转换为任务返回类型

C# C自动映射,无法隐式转换为任务返回类型,c#,automapper,C#,Automapper,我知道这看起来很简单,但我在这方面花了不少时间 不知何故,我无法成功返回列表 public Task<List<MyViewModel>> getGoodElections(long actionId) { var elections = _DBsource.ElectionTable.Where(e => e.ActionId == actionId && e.Status == "OK").ToListAsync(); List&

我知道这看起来很简单,但我在这方面花了不少时间

不知何故,我无法成功返回列表

public Task<List<MyViewModel>> getGoodElections(long actionId)
{
    var elections = _DBsource.ElectionTable.Where(e => e.ActionId == actionId && e.Status == "OK").ToListAsync();
    List< MyViewModel > list = Mapper.Map<List<MyViewModel>>(elections);
    return list;

}
在返回列表中;,这给了我一个错误:

无法将类型System.Collections.Generic.List隐式转换为System.Threading.Tasks.Task


有什么想法吗?

您没有在等待数据库调用的结果。因此,从DB调用返回的选择属于您的DB调用返回的DTO类型的Task类型,即即使您返回任务,AutoMapper也无法映射结果

您需要使该方法异步,然后等待DB调用的结果,然后再将其传递给Automapper进行映射

public async Task<List<MyViewModel>> getGoodElections(long actionId)
{
    var elections = await _DBsource.ElectionTable
       .Where(e => e.ActionId == actionId && e.Status == "OK")
       .ToListAsync();
    var list = Mapper.Map<List<MyViewModel>>(elections);
    return list;
}

您尚未等待任务ToListSync,因此没有列表。您应该等待对ToListSync的调用,并将该方法标记为async,如下所示

public async Task<List<MyViewModel>> getGoodElections(long actionId)
{
    var elections = await _DBsource.ElectionTable.Where(e => e.ActionId == actionId && e.Status == "OK").ToListAsync();
    List< MyViewModel > list = Mapper.Map<List<MyViewModel>>(elections);
    return list;

}

为什么要从非异步方法返回任务?如果必须,您可以返回Task.fromResultList我在发布此问题之前已尝试过返回Task.fromResultList。但是我得到了这个错误:“await”操作符只能在异步方法中使用。考虑用“AsiNC”修饰符标记该方法并将其返回类型改为“Task@Henrix错误消息非常明确地告诉您要做什么。这样做。@Henrix是的,确实如此,这就是为什么我们添加了前面提到的异步修改器:@Henrix我想你有第二个任务在那里是错误的:我太笨了。是的,我错过了“异步”…:D