Gestion des valeurs nulles dans les requêtes LINQ : résolution de l'erreur "Échec de la conversion"
Lors de l'exécution d'une requête LINQ, les développeurs peuvent rencontrer l'erreur : "Impossible de convertir en type de valeur 'Int32' car la valeur matérialisée est nulle." Ce problème se produit lors de la tentative de conversion d'une valeur nullable en une valeur de type valeur non nullable. .
La requête LINQ suivante illustre cette situation :
<code>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>
Cette requête calcule la somme de la colonne Montant pour un ID utilisateur spécifique dans la table CreditHistory. Toutefois, s'il n'existe aucun enregistrement pour l'utilisateur spécifié dans la table CreditHistory, l'expression ch.Amount renvoie la valeur null. Cette valeur nulle ne peut pas être convertie en type de valeur non nullable Int32, ce qui entraîne une erreur.
Solution : Gestion des valeurs nulles
Afin de gérer les valeurs nullables dans les requêtes LINQ, il existe deux approches possibles :
<code>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).DefaultIfEmpty(0).Sum();</code>
<code>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>
Dans cette version, l'expression (int?)ch.Amount convertit explicitement la valeur en int?, indiquant qu'elle peut être nulle. L'opérateur ?? suivant remplace toutes les valeurs nulles par la valeur par défaut de 0.
En implémentant l'une ou l'autre de ces deux méthodes, la requête peut gérer avec succès les valeurs nulles et renvoyer les résultats souhaités.
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!