c#错误-“;指定的强制转换无效”;

本文关键字:转换 无效 错误 | 更新日期: 2023-09-27 18:29:51

我在linq-to-datatable查询的where子句中收到一个"指定的强制转换无效"错误。我似乎不知道它出了什么问题。我想是paramValues引起了问题,因为它们是object类型,但我正在对每一个进行Convert.ToInt32。我仍然收到错误。需要注意的是,数据表中的所有列都是int类型。有什么想法吗?

protected DataRow getSubjectBandDataRow(DataSet relationalDataSet, DataRow dr, Parameters Params)
{
        DataRow myRow = relationalDataSet.Tables["SummaryDataLocalBands"].NewRow();
        myRow["fkSummarySubjectLocalID"] = (from subj in relationalDataSet.Tables["SummaryDataLocal"].AsEnumerable()
                                           where (subj.Field<int>("fkRosterSetID") == Convert.ToInt32(Params.Item(2).ParamValue) && 
                                                  subj.Field<int>("fkTestInstanceID") == dr.Field<int>("pkTestInstanceID") &&
                                                  subj.Field<int>("fkTestTypeID") == Convert.ToInt32(Params.Item(10).ParamValue) && 
                                                  subj.Field<int>("fkSchoolYearID") == dr.Field<int>("pkSchoolYearID") && 
                                                  subj.Field<int>("fkRosterTypeID") == 1 && 
                                                  subj.Field<int>("fkDistrictID") == (Convert.ToInt32(Params.Item(3).ParamValue) == 0 ? 1 : 0) &&
                                                  subj.Field<int>("fkSchoolID") == Convert.ToInt32(Params.Item(3).ParamValue) && 
                                                  subj.Field<int>("fkGradeID") == Convert.ToInt32(Params.Item(5).ParamValue) &&
                                                  subj.Field<int>("fkDepartmentID") == Convert.ToInt32(Params.Item(6).ParamValue) && 
                                                  subj.Field<int>("fkCourseID") == Convert.ToInt32(Params.Item(7).ParamValue) &&
                                                  subj.Field<int>("fkPeriodID") == Convert.ToInt32(Params.Item(8).ParamValue) && 
                                                  subj.Field<int>("fkDemoCommonCategoryID") == dr.Field<int>("fkDemoCommonCategotyID") &&
                                                  subj.Field<int>("fkDemoCommonCodeID") == Convert.ToInt32(Params.Item(1).ParamValue) && 
                                                  subj.Field<int>("fkTest_SubjectID") == dr.Field<int>("fkTest_SubjectID"))
                                           select subj.Field<int>("pkSummarySubjectLocalID")).Single();  
        //more unimportant code here
        return myRow;
    }

c#错误-“;指定的强制转换无效”;

当由于对象的值无法转换为目标类型而无法执行特定的强制转换时,就会出现您看到的错误。因此,您的某个参数中可能存在无法转换为整数的内容。例如,null或空字符串可能是候选字符串。