2012-02-17 14 views
7

robie to z LINQ:Pokój nie jest pustych typ

 // 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(); 

Ale mam błąd mówiąc mi

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

Czy wiesz jak rzucić zerowalne typu w tym przypadku?

Próbowałem <Double?> i mam 'Specified cast is not valid.'

+0

Czy można sprawdzić typ kolumny w tabeli bazy danych? "Określony rzut nie jest prawidłowy" byłby błędem, jeśli spróbujesz rzucić podwójną wartość na "podwójną?". Typ może być typu IEEE pojedynczy, dziesiętny lub inny typ całkowity. – phoog

+0

'' było rozwiązaniem, nie pracowałem, ponieważ używałem niewłaściwej obsady. Dzięki za pomoc –

Odpowiedz

3

domyślnie dwukrotnie nie można przypisać wartości null. Rozwiązaniem tego problemu jest użycie typu nullable: Double?

spróbuj tego:

 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' ma mniejszą szansę na' NULL' niż, powiedzmy, 'EXEC_PRICE' (np. Na niewypełnionym wypełnieniu). – dasblinkenlight

+0

Jest tam drugie podwójne, które zakładam, że może potrzebować tego samego traktowania ... – Chris

+0

Edytuję odpowiedź, :) – Akrem

5

Można użyć:

p.Field<Double?> 

T? jest skrótem Nullable<T>, wrapper dla typu wartości, które zezwala na wartości null.

+0

Próbowałem tego i dostałem "Określony rzut nie jest prawidłowy". –

4

Użyj typ:

Double? 

kiedy trzeba pustych podwójne

Powiązane problemy