Perché Linq su Entity Sum restituisce null quando il set di risultati è vuoto?

2

Ci sono alcune domande su Stack Overflow sul metodo di estensione Linq to Entity / Linq to SQL Sum, su come restituisce null quando il set di risultati è vuoto: 1 , 2 , 3 , 4 , 5 , 6 , 7 , e molti altri, nonché un post sul blog che discute il problema qui . Ritengo che sia un'incoerenza nell'implementazione di Linq.

Sto assumendo a questo punto che non è un bug, ma è più o meno funzionante come progettato. Capisco che ci sono soluzioni alternative (ad esempio, lanciare il campo a un tipo nullable, in modo da poter fondere con ?? ), e capisco anche che per l'SQL sottostante, è previsto un risultato NULL per un set di risultati vuoto.

Ma poiché anche il risultato dell'estensione Sum per i tipi non annullabili non è annullabile, perché il Linq su SQL / Linq su Somma entità si comporta in questo modo?

    
posta Hannele 20.08.2014 - 16:25
fonte

1 risposta

3

Il problema non è che EF o LINQ2SQL restituiscano null per un set vuoto, è che SQL restituisce null. Lungo queste linee, cosa vorresti aspettare EF o LINQ2SQL per tornare quando tenti di sommare su un valore nullo?

Generalmente, un valore nullo non è un candidato per le funzioni matematiche. Null di solito significa qualcosa sulla falsariga di "valore sconosciuto" ed è non uguale a zero (il valore predefinito di un int o decimale in .NET). Non puoi eseguire calcoli matematici su di esso.

Pertanto, sarebbe improprio che il framework decida di sostituire sempre un valore predefinito per un valore nullo e procedere con una somma erroneamente precisa. Invece, il framework si lamenta correttamente che l'operazione di somma è impossibile (a causa del valore nullo) ed è lasciata al chiamante decidere cosa fare nel caso di un valore nullo, usando le tecniche che hai descritto e collegato al tuo domanda.

    
risposta data 20.08.2014 - 20:24
fonte

Leggi altre domande sui tag