Comment vérifier la valeur DBNull dans les résultats de la requête Linq

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();