循环抛出异常can't将Null转换为String

本文关键字:Null 转换 String 抛出异常 can 循环 | 更新日期: 2023-09-27 18:03:16

我已经在我继承的代码中发现了这一点,事实证明它是Linq,而我以前没有Linq-ed。我看了一些例子,但我猜这不是100%的Linq问题,但也许是。

我得到了这个结构:

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

返回400个类别指示符作为字符串。dtResults是一个从查询中获取数据的DataTable

接下来我循环通过categories和第一次迭代,我得到一个Unable to cast object of type 'System.DBNull' to type 'System.String'.错误,因为索引0处的category在这个循环中为空: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);
        }

循环抛出异常can't将Null转换为String

你不能将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>

也许你可以试试:

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

希望对大家有所帮助