如何检查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”))
如果你希望那个领域是double
。 Sum
将根据MSDN将null
值视为零。
我不确定哪一个会收到错误,但您可以将其与DBNull.Value
进行比较。
String sCurr = obj.currency == DBNull.Value ? "" : obj.currency;
查找特定列的DBNull的CELLS数量的方法:
int numOfEmptyColA = MyDataTable.AsEnumerable().Where(p=>p.IsNull("ColA")).Count();