1

私は継承したコードでこれに苦労しました。いくつかの例を見てきましたが、100% Linq の問題ではないと思いますが、おそらくそうです。

私はこの構造を持っています:

var categories = dtResults.AsEnumerable().Select(r => r["Cat"]).Distinct().ToList();

400 個のカテゴリ指定子を文字列として返します。はdtResultsDataTableクエリからデータを取得する です。

次に、 をループし、categories最初の反復でUnable to cast object of type 'System.DBNull' to type 'System.String'.エラーが発生します。これはcategory、インデックス 0 がループ内で null であるためですforeach(string category in categories)

データを変更することはできませんが、空白を挿入することはできますが、どうすればよいですか?

更新 @flup が要求したループ:

foreach (string category in categories)
    {
        for (int i = 0; i < WucEntries2.Length; i++)
        {
            drOutput = dtOutput.NewRow();
            drOutput["Category"] = category;
            drOutput["SubCategory "] = subCategories[i];

            drResults = dtResults.Select(String.Format("Category = '{0}' AND SubCategory = '{1}'", category, subCategories[i]));
            if (drResults.Length > 0)
            {
                foreach (DataColumn column in dtResults.Columns)
                {
                    drOutput[column.ColumnName] = drResults[0][column.ColumnName];
                }
            }
            dtOutput.Rows.Add(drOutput);
        }
4

2 に答える 2

2

DBNullにキャストすることはできませんが、にキャストするstringことはできます。nullstring

var categories = dtResults.AsEnumerable()
    .Select(r => r["Cat"] == DBNull.Value ? (string)null : r["Cat"].ToString())
    .Distinct()
    .ToList();

これにより、リストがList<string>ではなく になりList<object>ます。

于 2013-03-11T15:06:39.467 に答える
1

多分あなたは試すことができます:

var categories = dtResults.AsEnumerable().Select(r => Convert.ToString(r["Cat"]))
                                         .Distinct()
                                         .ToList();

これが役立つことを願っています

于 2013-03-11T15:02:29.537 に答える