2012-05-30 23 views
15

Ho riscontrato un problema con questa query sta generando un errore.Il valore cast per il tipo "Decimal" non è riuscito perché il valore materializzato è nullo

var TotalToDatePayable = ( from ori in db.GetAll<WMPORI>() 
          where ori.CTMSysID == ctmSysId 
          select ori.ExB4Taxes).Sum(); 

ho cercato qui di seguito il codice da another similar question ma questo non ha risolto il mio problema:

var TotalToDatePayable = (Decimal?)( from ori in db.GetAll<WMPORI>() 
             where ori.CTMSysID == ctmSysId 
            select ori.ExB4Taxes).Sum()) ?? 0; 
+0

Questo funziona: var TotalToDatePayable = (da ori in db.GetAll () dove ori.CTMSysID == ctmSysId selezionare ori.ExB4Taxes) .DefaultIfEmpty (0) .sum(); – Developer

+0

@DmitryBychenko Ho pensato che quel tipo di indentazione era esclusiva per l'obiettivo C. Ora sono triste. – Rawling

+0

@Rawling 9: questo tipo di indentazione è tipico in SQL (che Linq emula anche nella domanda). Questa è stata la ragione per cui ho aggiunto spazi. –

risposta

23

È necessario lanciare ori.ExB4Taxes-decimal? all'interno della query.

var TotalToDatePayable = (from ori in db.GetAll<WMPORI>() 
          where ori.CTMSysID == ctmSysId 
          select (Decimal?) ori.ExB4Taxes).Sum() ?? 0; 
+0

È necessario aggiungere 1 parentesi in più all'inizio della query diverso da quello perfetto. Grazie. – Developer

Problemi correlati