无法转换类型为"<> f__AnonymousType5`6的对象

Gin*_*iha 4 c# linq asp.net asp.net-mvc

我有两个清单.从一个我想要两个选择少数数据,然后将该数据保存到另一个列表.

var ikj = Model.EmployeeInformationList
     .Select(m => new { m.GEmployeeGenInfoID, m.strDesignationName, m.strEmpOldCardNo, m.StrEmpID, m.GFactoryID, m.StrEmpName })
    .Distinct().ToList();


List<HolidayAlwEmployeeInfo> targetList = new List<HolidayAlwEmployeeInfo>(ikj.Cast<HolidayAlwEmployeeInfo>());

Model.HolidayAlwEmployeeInfoList = targetList;
Run Code Online (Sandbox Code Playgroud)

但是我收到了这个错误

无法将类型为'<> f__AnonymousType5`6 [System.Guid,System.String,System.String,System.String,System.Guid,System.String]'的对象强制转换为'FactoryProduct.Entities.Payroll.HolidayAlwEmployeeInfo'

Den*_*voy 10

您正在尝试投是通过调用创建匿名类型的实例new { m.GEmployeeGenInfoID, m.strDesignationName, m.strEmpOldCardNo, m.StrEmpID, m.GFactoryID, m.StrEmpName }的类型HolidayAlwEmployeeInfo,你不能这样做.

相反,你需要像这样重写第一行:

var ikj = Model.EmployeeInformationList
               .Select(m => new HolidayAlwEmployeeInfo(
                                m.GEmployeeGenInfoID,
                                m.strDesignationName,
                                m.strEmpOldCardNo,
                                m.StrEmpID,
                                m.GFactoryID,
                                m.StrEmpName ))
               .Distinct()
               .ToList();
Run Code Online (Sandbox Code Playgroud)

并确保HolidayAlwEmployeeInfo类有合适的构造函数把所有的参数m.GEmployeeGenInfoID,m.strDesignationName,m.strEmpOldCardNo,m.StrEmpID,m.GFactoryID,m.StrEmpName

或者(正如Stephen Muecke在他的评论中提到的),您可以HolidayAlwEmployeeInfo使用简单的构造函数进行实例化,并在初始化程序中指定属性/字段,如下所示:

var ikj = Model.EmployeeInformationList
               .Select(m => new HolidayAlwEmployeeInfo()
                            {
                                GEmployeeGenInfoID=m.GEmployeeGenInfoID,
                                strDesignationName=m.strDesignationName,
                                strEmpOldCardNo=m.strEmpOldCardNo,
                                StrEmpID=m.StrEmpID,
                                GFactoryID=m.GFactoryID,
                                StrEmpName=m.StrEmpName
                            })
               .Distinct()
               .ToList();
Run Code Online (Sandbox Code Playgroud)