如何检查Linq查询结果中的DBNull值

我使用以下代码并尝试按货币和代码分组。 在此之后,我试图循环结果集。

但问题是在循环结果时,最后我在每个语句中得到以下exception:

无法将对象从DBNull强制转换为其他类型。

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) { String sCurr =obj.currency; String Code = obj.Code; string amount= obj.amount.ToString()); } 

请帮我解决这个问题。

就像是

  amount = grp.Sum(x => Convert.ToDouble(x["AMOUNT"] == DBNull.Value ? 0 : x["AMOUNT"])); 

如果那是给你问题的那一行。

这个:

 amount = grp.Sum(x => Convert.ToDouble(x["AMOUNT"])) 

不会像你期望的那样工作。 如果x["AMOUNT"]DBNull.Value而不是有效的double ,则转换将失败并出现exception。 相反,尝试:

amount = grp.Sum(x.Field(“AMOUNT”))

如果你希望那个领域是doubleSum将根据MSDN将null值视为零。

我不确定哪一个会收到错误,但您可以将其与DBNull.Value进行比较。

 String sCurr = obj.currency == DBNull.Value ? "" : obj.currency; 

查找特定列的DBNull的CELLS数量的方法:

 int numOfEmptyColA = MyDataTable.AsEnumerable().Where(p=>p.IsNull("ColA")).Count();