以下是我的代码:
DataTable dt = new DataTable();
protected void Page_Load(object sender, EventArgs e)
{
dt.Columns.Add("RowId");
dt.Columns.Add("Amount");
DataRow row = dt.NewRow();
row[0] = "1";
row[1] = "2000";
dt.Rows.Add(row);
GetRecord(1);
}
protected void GetRecord(int RowId)
{
var results = from row in dt.AsEnumerable()
where row.Field<int>("RowId") == RowId
select row;
string FetchedRowId = results.ToArray()[0].ToString();
}
}
当我使用这种方式时,它会出错:指定的Cast在行中无效:
其中TableRow.Field<int>("RowId") == RowId
但是当我转换为:
protected void GetRecord(int RowId)
{
var results = from row in dt.AsEnumerable()
where row.Field<string>("RowId") == RowId.ToString()
select row;
string FetchedRowId = results.ToArray()[0].ToString();
}
它有效。为什么row.Field<int>
无效?
答案 0 :(得分:10)
问题是您没有指定列是int
。您可以使用Add(string, Type)
方法指定。
dt.Columns.Add("RowId", typeof(int));
dt.Columns.Add("Amount", typeof(int));
DataRow row = dt.NewRow();
// whether you add strings or ints here doesn't matter, it's converted
row[0] = "1";
row[1] = 2000;