Di seguito la query LINQ
genera l'errore mostrato di seguito quando si utilizza l' operatore null-coalescing ?? . Funziona bene se rimuovo ?? 0
parte. Ma ho bisogno di visualizzare 0 se t.cost
è nullo. Sto cercando di trovare l'equivalente LINQ del metodo IsNull(...)
di T-SQL come mostrato di seguito.
T-SQL:
SELECT IsNuLL(cost,0) from Orders Where OrdId = 123
LINQ:
float? fCost = _context.Orders.Where(r => r.OrdId == 123).Select(t => t.cost ?? 0).SingleOrDefault();
Errore su LINQ:
Unable to cast object of type `'System.Double' to type 'System.Single`
Nota:
VS2015
riconosce la sintassi ....Select(t => t.cost ?? 0)....
e compila bene, ma l'errore viene generato in fase di esecuzione. Inoltre; riconosce anche la sintassi ....Select(t => (t.cost ?? 0))....
ma genera lo stesso errore su di esso.
La tua domanda corrente:
Single? cost = _context
.Orders
.Where( r => r.OrdId == 123 )
.Select( t => t.cost ?? 0 )
.SingleOrDefault();
Può essere riscritto come:
Single? cost = _context.
.Orders
.SingleOrDefault( r => r.OrdId == 123 )
?.Cost;
cost
sarà null
se non ci sono righe dove r.OrderId == 123
o se r.Cost IS NULL
(SQL NULL). Nota il mio uso del ?.
operatore prima .Cost
.
Prova questo.
float? fCost = _context.Orders.Where(r => r.OrdId == 123).Select(t => new { cost = (t.cost == DBNull.value ? 0 : t.cost) }).SingleOrDefault();