C# 无法在linq查询中强制转换类型为的对象

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

我使用DataTable进行以下查询时出现错误: 无法将“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();
规格化可以是:

英格 无效的 数学 我怎样才能解决这个问题?请告诉我。

对于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