循环抛出异常无法将Null转换为String

时间:2013-03-11 14:59:13

标签: c# linq

我已经在我继承的代码中对此进行了修改,因为它确实是Linq而我之前没有Linq-ed。我看了一些例子,但我想这不是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'.错误,因为索引0处的category在循环中为空:foreach(string category in categories)。< / p>

我无法更改数据,但我可以插入空格,但我该怎么做?

更新 @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);
        }

2 个答案:

答案 0 :(得分:2)

您无法将DBNull投射到string,但您可以null投放到string,所以可能:

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

这也会使您的列表成为List<string>而不是List<object>

答案 1 :(得分:1)

也许你可以试试:

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

希望这会有所帮助