这里是情况,从我运行此代码之前的表中运行完美。但是当我更改表时会出现错误,而我认为不是,因为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");
}
那么问题是什么,我在其他地方出错了吗? 我很抱歉,如果不够清楚,你可以要求提供更多信息:)
之前感谢
答案 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;