簡體   English   中英

Linq To數據集錯誤System.InvalidCastException:指定的強制轉換無效

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM