代码之家  ›  专栏  ›  技术社区  ›  xzk

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

  •  0
  • xzk  · 技术社区  · 6 年前

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

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

    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 回复  |  直到 6 年前
        1
  •  7
  •   StuartLC    6 年前

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

    你需要制定方法 async ,然后等待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;
    }
    
        2
  •  0
  •   pseabury    6 年前

    您尚未等待任务(ToListAsync),因此您没有 List<Election> 。您应该等待对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;
    
    }