指定的强制转换对于不同的表无效?

时间:2011-12-08 01:59:27

标签: c# linq datatable

这里是情况,从我运行此代码之前的表中运行完美。但是当我更改表时会出现错误,而我认为不是,因为T_TEMPLATE_ID字段也是一个“int”,就像之前的表一样。

错误是:指定演员表无效

这是代码:

       DataTable dt;
       dt = getDownload(); // << here dt get table

       int iTemplateId = 3;
       IEnumerable<DataRow> query;

       try
       {
            query =
                from t in dt.AsEnumerable()
                where t.Field<double>("T_TEMPLATE_ID") == iTemplateId
                select t;

            // here comes the error
            dt = query.CopyToDataTable<DataRow>();
       }
       catch (Exception exp)
       {
            MessageBox.Show("Error: " + exp.Message, "Error");

       }

那么问题是什么,我在其他地方出错了吗? 我很抱歉,如果不够清楚,你可以要求提供更多信息:)

之前感谢

2 个答案:

答案 0 :(得分:1)

@ Mr.Rendezvous你可以试试这个:

检查测试是否有结果。在test和boundTable上添加断点。

            IEnumerable<DataRow> test =
            from t in dt.AsEnumerable()
            where Convert.ToInt32(t["T_TEMPLATE_ID"]) == iTemplateId
            select t;

            if(test.count() > 0)
            {
            //recods Found!
            DataTable boundTable  = test.CopyToDataTable<DataRow>();
            }
            else
            {
              //no Recods found!
            }

DataTableExtensions.CopyToDataTable(Of T)方法(IEnumerable(Of T))MSDN

此致

答案 1 :(得分:0)

听起来您的字段类型实际上不是double而是int。您的查询尝试(隐式)将int取消装箱为double,从而导致播放错误。更改查询,以便将该字段读为int

from t in dt.AsEnumerable()
where t.Field<int>("T_TEMPLATE_ID") == iTemplateId
select t;