Gestion des valeurs nulles dans la requête LINQ : résolution de l'échec de conversion de type
Lorsqu'une requête LINQ peut renvoyer une valeur nulle, l'erreur suivante peut être générée : "Impossible de convertir le type de valeur 'Int32' en null. Les paramètres génériques du type de résultat ou la requête doivent utiliser un type nullable pour résoudre ce problème." erreur et autorisez les valeurs nulles, envisagez l’approche suivante :
Méthode 1 : utilisez DefaultIfEmpty et Sum, et spécifiez la 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 ch.Amount).DefaultIfEmpty(0).Sum();</code>
Cette méthode utilise DefaultIfEmpty
pour insérer une valeur par défaut (0 dans ce cas) lorsqu'il n'y a aucun enregistrement correspondant dans la table CreditHistory
.
Méthode 2 : Convertir en un type nullable et utiliser l'opérateur ??
Dans cette méthode, la requête est modifiée pour convertir l'attribut<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>
). Cela informe le compilateur que la valeur peut être nulle. Utilisez ensuite l'opérateur Amount
pour gérer le cas de valeur nulle et attribuez une valeur par défaut (0 dans ce cas) si la valeur est nulle. int?
??
Cette méthode utilise la fonction
<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 COALESCE(ch.Amount, 0)).Sum();</code>
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!