La distribution de valeur de type 'Double' a échoué parce que la matérialisée valeur est null
CODE:
double cafeSales = db.InvoiceLines
.Where(x =>
x.UserId == user.UserId &&
x.DateCharged >= dateStart &&
x.DateCharged <= dateEnd)
.Sum(x => x.Quantity * x.Price);
ERREUR:
La distribution de valeur de type 'Double' a échoué parce que la matérialisée valeur est null. Le résultat de ce type de paramètre générique ou la requête doit utiliser un type nullable.
CE QUE J'AI DÉJÀ VU:
La conversion vers le type de la valeur 'Int32" a échoué parce que le matérialisée valeur est null
La conversion vers le type de la valeur 'Virgule' a échoué parce que la matérialisée valeur est null
CE QUE J'AI ESSAYÉ:
double cafeSales = db.InvoiceLines
.Where(x =>
x.UserId == user.UserId &&
x.DateCharged >= dateStart &&
x.DateCharged <= dateEnd)
.DefaultIfEmpty()
.Sum(x => x.Quantity * x.Price);
Et:
double? cafeSales = db.InvoiceLines
.Where(x =>
x.UserId == user.UserId &&
x.DateCharged >= dateStart &&
x.DateCharged <= dateEnd)
.Sum(x => x.Quantity * x.Price);
Aucune de ces travaux. Je sais que la cause du problème est qu'il n'y a pas de lignes dans la table pour le nom je suis de passage dans. Dans ce cas, je préfère que Sum() revient tout juste d'un 0 à moi. Des idées?
- Vous devez marquer comme réponse de tout ci-dessous des solutions qui est le plus approprié et efficace.
- Vous devez les accepter une réponse à partir de ci-dessous pour d'autres, de s'appuyer sur.
- Double Possible de La conversion vers le type de la valeur 'Int32" a échoué parce que le matérialisée valeur est null
Vous devez vous connecter pour publier un commentaire.
Meilleure Solution
Vous pouvez vérifier si la collection a des résultats corrects.
Where
méthode ne permet pas réellement de faire une requête, mais prépare l'un et l'appel àAny
fait la véritable db-requête. De toute façon, je préfère le @Jitendra Pancholi solution, ce qui rend @Maarten deux états dans l'une avec l'??
de l'opérateur.Je sais c'est un peu vieux, mais juste au cas où il permet à quiconque.
@Matt, je suppose que le
DefaultIFEmpty()
méthode devrait fonctionner pour vous, juste au cas où vous passez une valeur par défaut pour la colonne que vous postulezSum
sur. Cette méthode a des surcharges qui vous pourriez vouloir vérifier et je suggère de conversion de type si surcharges ne prennent pas en charge vos besoins.Cela devrait faire l'affaire (vous pouvez avoir à supprimer l'une des conditions si
Quantity
ouPrice
ne sont pas nullable):Les solutions ci-dessus ne fonctionne pas pour moi. Mon problème est similaire. J'étais sûr que pas de lignes ont été retournés, mais Somme se comporte d'une certaine manière étrange. J'ai donc décidé d'ajouter une case juste avant l'appel de l'expression lambda où je l'ai vérifier la propriété count de lignes retournées par la lambda. Si elle est supérieure à zéro, puis-je appeler l'expression de somme. Ce qui a fonctionné pour moi.
Cette solution fonctionne.En fait, Vous devez utiliser l'opérateur ternaire pour vérifier la valeur et de l'insérer Guid si la valeur null dans la deuxième colonne et dans la seconde table.et il va fonctionner.
"La distribution de valeur de type 'Double' a échoué parce que la matérialisée valeur est null" sera résolu
Grâce