将Task<IEnumerable<KTaskDetailsEntity>>转换为Task<IEnumerable<TaskDetailsEntity>>报错求助
问题解决:异步集合类型转换报错修复
错误根源
你直接在Task<IEnumerable<KTaskDetailsEntity>>对象上调用Cast/Select方法,但这些是IEnumerable<T>的扩展方法,不属于Task<T>类型。必须先通过await获取Task内部实际的IEnumerable<KTaskDetailsEntity>集合,才能执行集合转换操作。
另外原代码存在逻辑矛盾:方法要返回TaskDetailsEntity类型集合,但你写的转换是把元素转成KTaskDetailsEntity,和返回类型不匹配,需要修正转换方向。
修正后的代码
public async Task<IEnumerable<TaskDetailsEntity>> GetTaskDetails(int personnelSK) { // 先await拿到Task内部的实际集合 var kTaskDetailsList = await GetKTaskDetails(personnelSK); // 将KTaskDetailsEntity转换为TaskDetailsEntity,需确保两种类型有合法转换方式 IEnumerable<TaskDetailsEntity> taskDetailsEntitiesList = kTaskDetailsList .Select(k => (TaskDetailsEntity)k); // 若没有隐式/显式转换,需手动映射属性 return taskDetailsEntitiesList; } public async Task<IEnumerable<KTaskDetailsEntity>> GetKTaskDetails(int personnelSK) { List<ParameterInfo> parameters = new List<ParameterInfo>(); if (personnelSK != 0) { parameters.Add(new ParameterInfo(){ ParameterName = "@PI_PERSONNEL_SK" , ParameterValue = personnelSK }); } IEnumerable<KTaskDetailsEntity> KTaskDetailsEntitiesList = await _SQLHelper.GetRecords<KTaskDetailsEntity>( "[xx].[GET_TASK_DATA]" , parameters); return KTaskDetailsEntitiesList; }
补充说明
- 若
KTaskDetailsEntity和TaskDetailsEntity之间没有继承关系或显式转换运算符,需要手动映射属性,示例如下:.Select(k => new TaskDetailsEntity { TaskId = k.TaskId, PersonnelSK = k.PersonnelSK, // 其他属性逐一映射 }) - 不要忘记确保代码顶部引用了
System.Linq命名空间,否则Select/Cast等扩展方法会无法识别。
内容的提问来源于stack exchange,提问作者Lim
相关产品推荐
相关产品推荐

