C# 无法在linq查询中强制转换类型为的对象
我使用DataTable进行以下查询时出现错误: 无法将“System.DBNull”类型的对象强制转换为“System.String”类型C# 无法在linq查询中强制转换类型为的对象,c#,asp.net,linq,C#,Asp.net,Linq,我使用DataTable进行以下查询时出现错误: 无法将“System.DBNull”类型的对象强制转换为“System.String”类型 var specList = (from r in dt.AsEnumerable() where (decimal)r["stdyear"] == 0 && (string)r["SPECLIZATION"] != null select r["SPE
var specList = (from r in dt.AsEnumerable()
where (decimal)r["stdyear"] == 0 && (string)r["SPECLIZATION"] != null
select r["SPECLIZATION"]).Distinct().ToList();
var specList = (from r in dt.AsEnumerable()
where r.Field<decimal>("stdyear") == 0 && r.Field<string?>("SPECLIZATION").HasValue
select r.Field<string?>("SPECLIZATION").Value).Distinct().ToList();
规格化可以是:
英格
无效的
数学
我怎样才能解决这个问题?请告诉我。对于r[specification],它可以为null,但在检查它是否为null之前,请先将其转换为string,因此异常抛出:无法将“System.DBNull”类型的对象转换为“System.string”类型
var specList = (from r in dt.AsEnumerable()
where (decimal)r["stdyear"] == 0 && (string)r["SPECLIZATION"] != null
select r["SPECLIZATION"]).Distinct().ToList();
var specList = (from r in dt.AsEnumerable()
where r.Field<decimal>("stdyear") == 0 && r.Field<string?>("SPECLIZATION").HasValue
select r.Field<string?>("SPECLIZATION").Value).Distinct().ToList();
只需使用。ToString,它工作正常:
var specList = (from r in dt.AsEnumerable()
where r["stdyear"].ToString() == "0" && r["SPECLIZATION"].ToString() != ""
select r["SPECLIZATION"]).Distinct().ToList();
试试这个:
= dt.AsEnumerable().where(r=> r.Field<decimal>("stdyear") == 0 && r.Field<string> "SPECLIZATION") !=NULL).select(s=> s.Field<string>("SPECLIZATION")).Distinct().ToList();
这个字符串[规格化]!=尝试将DBNull强制转换为字符串时,null失败,只需执行以下操作:
r["SPECLIZATION"] != DBNull.Value
如果显式调用Field方法的用法以及为什么更好,这将是一个更好的答案。请检查指定值是否为DBNull.value,而不是null