C# Automapper异步方法返回类型错误:无法转换List到Task<List>
问题分析与解决思路
嘿,我一眼就揪出问题所在啦~你遇到的类型转换错误,核心原因是异步操作的处理方式不对,咱们一步步来搞定:
错误根源
你调用的ToListAsync()是个异步方法,它返回的不是直接的List<Election>,而是Task<List<Election>>——这个Task是异步操作的“占位符”,代表未来才会拿到的结果。你直接把这个Task对象传给Mapper,最后返回的是List<MyViewModel>,但方法签名要求返回Task<List<MyViewModel>>,自然就出现了类型不匹配的错误。
修正后的代码
只需要两步调整:给方法加上async修饰符,并用await等待异步操作完成,拿到实际的列表结果再做映射:
public async Task<List<MyViewModel>> GetGoodElections(long actionId) { // 用await等待异步查询完成,拿到真实的Election列表 var elections = await _DBsource.ElectionTable .Where(e => e.ActionId == actionId && e.Status == "OK") .ToListAsync(); // 映射成ViewModel列表 var viewModelList = Mapper.Map<List<MyViewModel>>(elections); return viewModelList; }
额外优化(可选)
要是想让代码更简洁,可以把映射和返回合并成一行:
public async Task<List<MyViewModel>> GetGoodElections(long actionId) { var elections = await _DBsource.ElectionTable .Where(e => e.ActionId == actionId && e.Status == "OK") .ToListAsync(); return Mapper.Map<List<MyViewModel>>(elections); }
小提示
按照C#的命名规范,方法名建议使用PascalCase(首字母大写),所以getGoodElections改成GetGoodElections会更规范哦~
内容的提问来源于stack exchange,提问作者xzk
相关产品推荐
相关产品推荐

