【发布时间】:2022-12-11 20:02:04
【问题描述】:
我想将项目列表从一个对象转换为另一个对象,如下所示:
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 GetKTaskDetails(personnelSK) ).Cast...。但我注意到您正在将KTaskDetailsEntity转换为TaskDetailsEntity。KTaskDetailsEntity是否继承自TaskDetailsEntity?如果它们是 2 个不同的类,您将得到InvalidCastException...在这种情况下您需要一个映射器。例如:Automapper
标签: c# asp.net-core-mvc