210 votes

Le transfert vers le type de valeur 'Int32' a échoué car la valeur matérialisée est nulle.

J'ai le code suivant. J'obtiens une erreur :

"Le cast vers le type de valeur 'Int32' a échoué car la valeur matérialisée est nulle. Soit le paramètre générique du type de résultat, soit la requête doit utiliser un type nullable."

lorsque la table CreditHistory ne contient aucun enregistrement.

var creditsSum = (from u in context.User
                  join ch in context.CreditHistory on u.ID equals ch.UserID                                        
                  where u.ID == userID
                  select ch.Amount).Sum();

Comment puis-je modifier la requête pour qu'elle accepte les valeurs nulles ?

3voto

Lijo Points 4002

Je vois que cette question a déjà reçu une réponse. Mais si vous souhaitez qu'elle soit divisée en deux déclarations, vous pouvez envisager ce qui suit.

var credits = from u in context.User
              join ch in context.CreditHistory 
                  on u.ID equals ch.UserID                                        
              where u.ID == userID
              select ch;

var creditSum= credits.Sum(x => (int?)x.Amount) ?? 0;

0voto

Ogglas Points 1

J'ai obtenu cette erreur dans Entity Framework 6 avec ce code au moment de l'exécution :

var fileEventsSum = db.ImportInformations.Sum(x => x.FileEvents)

Mise à jour de LeandroSoares :

Utilisez ceci pour une exécution unique :

var fileEventsSum = db.ImportInformations.Sum(x => (int?)x.FileEvents) ?? 0

Original :

J'ai changé pour ça et ça a marché :

var fileEventsSum = db.ImportInformations.Any() ? db.ImportInformations.Sum(x => x.FileEvents) : 0;

0voto

user3820036 Points 13

J'étais également confronté au même problème et je l'ai résolu en rendant la colonne nullable à l'aide de l'opérateur " ?".

Sequnce = db.mstquestionbanks.Where(x => x.IsDeleted == false && x.OrignalFormID == OriginalFormIDint).Select(x=><b>(int?)x.Sequence</b>).Max().ToString();

Parfois, null est retourné.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X