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

时间:2013-10-31 16:17:32

标签: c# linq datatable

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

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

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

    DataTable dt = new DataTable();

    var result = from r in dt.AsEnumerable()
               result r by new
               {
                    currency = r.Field<String>("CURRENCY"),
                    Code = r.Field<String>("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());
    }

请帮我解决此问题。

4 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

此:

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

无法按预期工作。如果x["AMOUNT"]DBNull.Value而不是有效double,则转换将失败并出现异常。相反,尝试:

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

如果您希望该字段为doubleSum会将null值视为零,每MSDN

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

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

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