对异步列表使用Select等Linq操作提示Task无Select定义如何解决
问题原因
报错的核心是你调用List()方法后直接执行了Select,此时拿到的还不是List<FilesTable>实体集合,而是未完成执行的Task<List<FilesTable>>异步任务对象,Task类型本身没有实现Linq的Select扩展方法,自然会提示找不到对应定义。
修复方案
你只需要调整执行顺序,先通过await拿到List()方法返回的实际集合结果,再对结果执行Select转换即可,修改GetFiles方法代码如下:
public async Task<List<FilesModel>> GetFiles() { // 先等待异步任务执行完成,拿到实际的FilesTable集合 var fileTables = await new FilesTable().List(); // 再对实体集合执行Linq转换操作 return fileTables.Select(e => (FilesModel)e).ToList(); }
可选优化说明
如果需要更精简的写法,也可以引入System.Linq.Async包直接操作异步流,但上述方案不需要额外依赖,是兼容性最高的通用处理方式。
内容的提问来源于stack exchange,提问作者Heba Ibrahim
相关产品推荐
相关产品推荐

