【发布时间】:2012-02-06 21:44:51
【问题描述】:
对于这个 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”。请使用可空类型。
我不知道可空类型,也不知道如何使用可空类型来克服此异常。
【问题讨论】:
-
简而言之:默认情况下,原始类型(如
int、double、float、...)不能分配空值。这个问题的解决方案是使用可空类型(如int?),它实际上只是原始类型的包装器。 -
看来你用的是DataSet,可能是DataAdapter填充的。如果您确定生成的查询仅包含单个表,则可以不填写 DataSet but a DataTable。
-
什么时候需要使用可空类型?什么场景?为什么我们必须使用相同的?需要有关 NUllable 类型的用途和优缺点的信息?
-
@sukumar 谷歌“可空类型 C#”并阅读它。你需要学习如何研究自己的问题,而不是要求别人给你答案。
标签: c# linq linq-to-sql .net-3.5 exception-handling