![](/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.