Linq结果Int错误:指定的强制转换无效

时间:2013-11-20 18:12:26

标签: c# .net linq

以下是我的代码:

   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>无效?

1 个答案:

答案 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;