J’utilise le code ci-dessous et tente de regrouper par devise et par code. Après cela, j’essaie de parcourir l’ensemble des résultats.
Mais le problème est tout en parcourant les résultats, à la fin je reçois l’exception ci-dessous sur le pour chaque déclaration:
L’object ne peut pas être converti de DBNull vers d’autres types.
DataTable dt = new DataTable(); var result = from r in dt.AsEnumerable() result r by new { currency = r.Field("CURRENCY"), Code = r.Field("CODE") } into grp select new { currency = grp.Key.currency, Code = grp.Key.Code, amount = grp.Sum(x => Convert.ToDouble(x["AMOUNT"])) }; foreach (var obj in result) { Ssortingng sCurr =obj.currency; Ssortingng Code = obj.Code; ssortingng amount= obj.amount.ToSsortingng()); }
S’il vous plaît aidez-moi à résoudre ce problème.
Quelque chose comme
amount = grp.Sum(x => Convert.ToDouble(x["AMOUNT"] == DBNull.Value ? 0 : x["AMOUNT"]));
Si c’est la ligne qui vous donne le problème.
Ce:
amount = grp.Sum(x => Convert.ToDouble(x["AMOUNT"]))
ne fonctionnera pas comme prévu. Si x["AMOUNT"]
est DBNull.Value
au lieu d’un double
valide, la conversion échouera avec une exception. Au lieu de cela, essayez:
montant = grp.Sum (x.Field (“AMOUNT”))
si vous vous attendez à ce que ce champ soit un double
. Sum
traitera les valeurs null
comme zéro, par MSDN .
Je ne suis pas sûr de savoir lequel obtient l’erreur, mais vous pouvez le comparer à DBNull.Value
comme ceci.
Ssortingng sCurr = obj.currency == DBNull.Value ? "" : obj.currency;
Le moyen de trouver le nombre de CELLULES avec des DBNulls pour une colonne spécifique:
int numOfEmptyColA = MyDataTable.AsEnumerable().Where(p=>p.IsNull("ColA")).Count();