2012-02-17 38 views
7

我與LINQ這樣做:雙是不是可空類型

 // let use Linq 
     var DateMarket = from p in Orders_From_CRD.AsEnumerable() 
         where p.Field<Double>("Fill_ID") != null 
         select OrderTable.Rows.Add(p.Field<DateTime>("trade_date"), p.Field<string>("ticker"), 
         p.Field<Double>("EXEC_QTY"), p.Field<Double>("EXEC_PRICE")); 

     TradeTable = DateMarket.CopyToDataTable(); 

但我有一個錯誤,告訴我

Cannot cast DBNull.Value to type 'System.Double'. Please use a nullable type. 

你知道如何在這種情況下,投可空類型?

我試圖<Double?>,我默認了'Specified cast is not valid.'

+0

你檢查過列的數據庫表的類型?如果您嘗試將非double值轉換爲double,則「指定的轉換無效」將會出錯。該類型可以是IEEE單個或十進制或某種整數類型。 – phoog 2012-02-17 18:24:11

+0

''是解決方案,我沒有工作,因爲我使用了錯誤的演員。感謝您的幫助 – 2012-02-20 08:37:28

回答

3

,雙不能分配空值。解決此問題的方法是使用可空類型:Double?

試試這個:

 var DateMarket = from p in Orders_From_CRD.AsEnumerable() 
        where p.Field<Double?>("Fill_ID") != null 
        select OrderTable.Rows.Add(p.Field<DateTime>("trade_date"), p.Field<string>("ticker"), 
        p.Field<Double?>("EXEC_QTY"), p.Field<Double?>("EXEC_PRICE")); 

    TradeTable = DateMarket.CopyToDataTable(); 
+0

'Fill_ID'不太可能比'EXEC_PRICE'(例如在未填充的填充上)'NULL'。 – dasblinkenlight 2012-02-17 16:57:53

+0

還有第二個在那裏,我認爲可能需要相同的待遇... – Chris 2012-02-17 16:58:01

+0

我編輯答案,:) – Akrem 2012-02-17 16:59:18

5

你可以使用:

p.Field<Double?> 

T?是簡寫Nullable<T>,對於價值型允許空值的包裝。

+0

我試過,我得到'指定的演員是無效的。' – 2012-02-17 17:16:34

4

使用類型:

Double? 

當你需要一個可空雙

相關問題