Maison >développement back-end >C++ >Comment résoudre les erreurs « Échec de la conversion en Int32 » dans les requêtes LINQ avec des valeurs nulles ?

Comment résoudre les erreurs « Échec de la conversion en Int32 » dans les requêtes LINQ avec des valeurs nulles ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2025-01-10 20:41:45559parcourir

How to Resolve

Gestion des valeurs nulles dans les requêtes LINQ : résolution de l'erreur "Impossible de convertir en Int32"

Lorsque vous rencontrez l'erreur « Impossible de convertir en type de valeur 'Int32' car la valeur matérialisée est nulle » dans une requête LINQ, cela indique une inadéquation entre le type non nul attendu et la présence possible de valeurs nulles dans les résultats de la requête.

Requête originale :

<code class="language-csharp">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();</code>

Question :

Cette requête récupère la somme de ch.Amount pour les utilisateurs avec un ID utilisateur spécifique. Cependant, s'il n'y a aucun enregistrement pour cet utilisateur dans la table CreditHistory, la requête tentera de convertir les valeurs nulles dans les résultats de la base de données en Int32, provoquant une erreur.

Solution :

Pour prendre en charge les valeurs nulles, les solutions incluent l'introduction de types nullables et la gestion appropriée des cas nuls.

Utiliser des types nullables :

Tout d’abord, convertissez l’expression de la clause select en un type nullable, tel que int ?. Cela indiquera au compilateur que la propriété peut contenir une valeur nulle :

<code class="language-csharp">var creditsSum = (from u in context.User
                  join ch in context.CreditHistory on u.ID equals ch.UserID                                        
                  where u.ID == userID
                  select (int?)ch.Amount).Sum();</code>

Utilisez l'opérateur de coalescence nul (??) :

Ensuite, utilisez l'opérateur ?? pour gérer le cas nul. Il vérifie si l'expression est vide et renvoie la valeur par défaut (dans ce cas 0) :

<code class="language-csharp">var creditsSum = (from u in context.User
                  join ch in context.CreditHistory on u.ID equals ch.UserID                                        
                  where u.ID == userID
                  select (int?)ch.Amount).Sum() ?? 0;</code>

En incorporant ces modifications, les requêtes peuvent gérer les valeurs nulles avec élégance et renvoyer des résultats appropriés, évitant ainsi les erreurs de conversion.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn