2012-02-17 65 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? 

当你需要一个可空双

相关问题