C#Automapper,无法隐式转换为Task返回类型

时间:2018-05-16 15:38:11

标签: c# automapper

我知道它看起来很简单,但我花了很多时间在这上面。

不知怎的,我无法成功返回列表...

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<MyViewModel>类型转换为System.Threading.Tasks.Task<System.Collections.Generic.List<MyViewModel>>

有什么想法吗?

2 个答案:

答案 0 :(得分:6)

您没有等待数据库调用的结果。因此,从DB调用返回的elections类型为Task<>,无论您的数据库调用返回的是什么DTO类型(即使您返回Task,AutoMapper赢了&# 39;无论如何都能够映射结果。)

您需要创建方法async,然后等待数据库调用的结果,然后再将其传递给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;
}

答案 1 :(得分:0)

您还没有等待任务(ToListAsync),因此您没有List<Election>。您应该等待对ToListAsync()的调用,并将该方法标记为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;

}