![](/img/trans.png)
[英]System.InvalidCastException: Specified cast is not valid (linq query)
[英]Linq To Data set error System.InvalidCastException: Specified cast is not valid
我使用Linq到数据集“ System.InvalidCastException:指定的转换无效”时出现以下异常。
问题如下,我有一个类型为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()的值。 使用字符串作为类型是不可能的...
谢谢
您没有使用类型化的DataSet,所以我的第一个问题是DataTable是否知道这些字段应该为“ int”? 首先还是它们被列为字符串? 如果DataTable将这些字段视为字符串,则会遇到该错误。 以下代码假定具有Models DataRow的TestData DataSet,其中两个可空字符串列为YearBegin和YearEnd:
using (TestData ds = new TestData())
{
// Typed Rows
ds.Models.AddModelsRow("1", "2");
ds.Models.AddModelsRow(ds.Models.NewModelsRow()); // NULL INFO TEST
// Untyped rows
DataRow r = ds.Models.NewRow();
r[0] = "4";
r[1] = "5";
ds.Models.Rows.Add(r);
//query
var list = from m in ds.Tables["Models"].AsEnumerable()
select new Model
{
// rest of members omitted to simplify
YearBegin = m.Field<int?>("YearBegin"),
YearEnd = m.Field<int?>("YearEnd"),
};
}
该代码将遇到InvalidCastException。 但是,当我将DataTable上的类型翻转为可为null的Int32时,几乎相同的代码可以正常工作:
using (TestData ds = new TestData())
{
// Typed Rows
ds.Models.AddModelsRow(1, 2);
ds.Models.AddModelsRow(ds.Models.NewModelsRow()); // NULL INFO TEST
// Untyped rows
DataRow r = ds.Models.NewRow();
r[0] = 4;
r[1] = 5;
ds.Models.Rows.Add(r);
//query
var list = from m in ds.Tables["Models"].AsEnumerable()
select new Model
{
// rest of members omitted to simplify
YearBegin = m.Field<int?>("YearBegin"),
YearEnd = m.Field<int?>("YearEnd"),
};
}
看一下您的数据表。 您可以在那里改正问题。 字段转换为整数? 除非您的DataTable字段与int匹配,否则将无法正常工作? 类型。
问题已解决,我正在使用旧式访问数据库,并且数据类型存储为Integer而不是存储在Long Integer上,这意味着它在数据集中表示为Int16,因此无效的强制转换异常...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.