4

以下のコードを使用して、通貨とコードでグループ化しようとしています。この後、結果セットをループしようとしています。

しかし、問題は結果をループしているときに発生し、最後に for each ステートメントで以下の例外が発生します。

オブジェクトを 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

4 に答える 4

4

何かのようなもの

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

それが問題を引き起こしている行である場合。

于 2013-10-31T16:37:57.373 に答える
1

これ:

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

期待どおりに動作しません。x["AMOUNT"]DBNull.Value有効な の代わりである場合、double変換は例外で失敗します。代わりに、次を試してください。

amount = grp.Sum(x.Field<double?>("AMOUNT"))

そのフィールドがdouble. MSDNに従って、値をゼロとしてSum扱います。null

于 2013-10-31T16:32:37.287 に答える