LINQ查询中的InvalidCastException

时间:2012-01-10 13:26:36

标签: c# linq linq-to-sql .net-3.5 exception-handling

对于这个LINQ查询,我得到以下例外:

(from row in ds.Tables[0].AsEnumerable()
 where row.Field<string>("Dept_line_code") == DeptCode &&
 row.Field<string>("Skill_Name") == skill &&
 row.Field<string>("Acct_Code") == account && row.Field<string>("Location") == dtNewTable.Rows[intRow]["Location"].ToString()
 select row.Field<int>("Presently_Available") == null ? 0 : row.Field<int>("Presently_Available")
).FirstOrDefault();

异常信息:

  

异常类型:InvalidCastException

     

异常消息:无法将DBNull.Value强制转换为“System.Int32”。请使用可空类型。

我不知道可以为空的类型,我不知道如何使用可空类型来克服此异常。

3 个答案:

答案 0 :(得分:23)

你必须使int accept null value =&gt;诠释?

row.Field<int?>("Presently_Available") == null ? 0 : row.Field<int>("Presently_Available") ;

这是Nullable Types的link

答案 1 :(得分:8)

select row.Field<int?>("Presently_Available")

答案 2 :(得分:5)

row.Field<int>更改为row.Field<int?>