Gestion des valeurs nulles dans les requêtes LINQ : résolution de l'erreur « Impossible de convertir en type de valeur 'Int32' »
Ce code utilise une requête LINQ pour récupérer le montant total de l'historique de crédit pour un ID utilisateur spécifique. Lorsqu'il n'y a aucun enregistrement dans la table CreditHistory, vous rencontrerez des erreurs dues au renvoi de valeurs nulles.
Réécrire la requête pour gérer les valeurs nulles
L'erreur se produit car la méthode Sum() attend une valeur non nulle, mais la requête peut renvoyer une valeur nulle. Pour résoudre ce problème, vous pouvez modifier la requête pour accepter les types nullables à l'aide de l'opérateur ?? ou de la méthode DefaultIfEmpty().
Utilisez l'opérateur ??
L'opérateur?? peut être utilisé pour gérer les valeurs nulles en spécifiant une valeur par défaut :
<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>
Ce code convertit d'abord la propriété Amount en un entier pour indiquer qu'elle peut être nulle. La somme est ensuite calculée à l'aide de la méthode Sum(), qui renvoie un int ?. Utilisez ensuite l'opérateur ?? pour attribuer une valeur par défaut de 0 si le résultat est vide.
Utilisez la méthode DefaultIfEmpty()
Vous pouvez également utiliser la méthode DefaultIfEmpty() pour gérer les valeurs vides :
<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).DefaultIfEmpty(0).Sum();</code>
Cette méthode ajoute une valeur par défaut (0) à la séquence avant d'effectuer l'opération Sum(). Si la séquence ne contient aucun élément, la valeur par défaut sera utilisée pour les calculs de somme.
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!