循环抛出异常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);
}
你不能将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();
希望对大家有所帮助