【发布时间】:2012-01-15 01:19:23
【问题描述】:
我使用 Linq 对数据集“System.InvalidCastException: Specified cast is not valid.”得到以下异常。
问题如下我有一个具有两个int类型值的模型?数据库中的值不是必需的,因此某些字段为空白。我已将表读入数据集,现在我需要使用以下代码查询数据集。
//model
public class Model
{
// Public Properties
...
...
...
public int? YearBegin { get; set; }
public int? YearEnd { get; set; }
}
//query
var list = from m in data.Tables["Models"].AsEnumerable()
select new Model
{
// rest of members omitted to simplify
YearBegin = m.Field<int>("YearBegin"),
YearEnd = m.Field<int>("YearEnd")
};
我已经尝试了以下没有奏效:
m.Field<int?>("YearBegin")
YearEnd = m.IsNull("YearEnd") ? null, m.Field<int>("YearEnd")
是否有另一种方法来检查字段是否具有类似于 String.IsNullOrEmpty() 的值。 使用字符串作为类型是不可能的...
谢谢
【问题讨论】:
-
当您尝试 'YearBegin = m.Field
("YearBegin")' 时发生了什么?你有同样的错误吗? -
是的,同样的错误。 m.IsNull("YearEnd") 似乎也一直返回 true。
-
虽然您的模型可能将字段作为 int,但列类型的基础数据库是什么?无效转换可能是因为您正在尝试转换不兼容的类型(例如 Oracle 喜欢将 Number 列返回为十进制)。列也可能是 Date/DateTime,在这种情况下,您需要转换为 DateTime 并提取 Year 属性。
-
问题已解决,我正在处理旧式访问数据库,并且数据类型存储为 Integer 而不是 Long Integer,这意味着它在数据集中表示为 Int16,因此出现 Invalid cast 异常...