从任务<IEnumerable<X>>转换为 Task<IEnumerable<Y>>



我想将一个项目列表从一个对象强制转换为另一个对象,如下所示:

public async Task<IEnumerable<TaskDetailsEntity>> GetTaskDetails(int personnelSK)
{            
/* 
IEnumerable<TaskDetailsEntity> TaskDetailsEntitiesList = 
await GetKTaskDetails(personnelSK).Select(
a => (KTaskDetailsEntity)a).ToList();
*/
IEnumerable<TaskDetailsEntity> TaskDetailsEntitiesList = 
await GetKTaskDetails(personnelSK).Cast<KTaskDetailsEntity>().ToList();

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;
}

但是有了这个,我在第一个方法中得到了低于错误的值:

'Task<IEnumerable<KTaskDetailsEntity>>'不包含'Cast'的定义,并且无法找到接受'Task<IEnumerable<KTaskDetailsEntity>>'类型的第一个参数的可访问扩展方法'Cast'(您是否缺少using指令或程序集引用?)

用括号括起你的await-ed结果:

public async Task<IEnumerable<TaskDetailsEntity>> GetTaskDetails(int personnelSK)
{            
//IEnumerable<TaskDetailsEntity> TaskDetailsEntitiesList = await GetKTaskDetails(personnelSK).Select(a => (KTaskDetailsEntity)a).ToList();
IEnumerable<TaskDetailsEntity> TaskDetailsEntitiesList = (await GetKTaskDetails(personnelSK)).Cast<TaskDetailsEntity>().ToList();

return TaskDetailsEntitiesList;
}

实际上,由于IEnumerable<T>协方差,这里不需要Cast<>调用,所以,最后一个是:

public async Task<IEnumerable<TaskDetailsEntity>>GetTaskDetails(int personnelSK)
{        
return (await GetKTaskDetails(personnelSK)).ToList();
}

最新更新