'无法投射类型'在linq查询

时间:2014-08-19 02:18:41

标签: 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["SPECLIZATION"]).Distinct().ToList();

SPECLIZATION可能是:

  • ENG
  • NULL
  • MATH

我该如何解决这个问题?指导我。

4 个答案:

答案 0 :(得分:1)

对于r["SPECLIZATION"],它可以为null,但在检查它是否为null之前,首先将其转换为字符串,因此例外抛出:无法转换类型' System.DBNull&的对象#39;输入' System.String'

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();

答案 1 :(得分:0)

尝试将(string)r["SPECLIZATION"] != null投射到DBNull时,此string失败,只需执行此操作:

r["SPECLIZATION"] != DBNull.Value

答案 2 :(得分:-1)

只需使用.ToString(),它可以正常工作:)

var specList = (from r in dt.AsEnumerable()
                        where r["stdyear"].ToString() == "0" && r["SPECLIZATION"].ToString() != ""
                        select r["SPECLIZATION"]).Distinct().ToList(); 

答案 3 :(得分:-1)

试试这个:

= dt.AsEnumerable().where(r=> r.Field<decimal>("stdyear") == 0 && r.Field<string> "SPECLIZATION") !=NULL).select(s=> s.Field<string>("SPECLIZATION")).Distinct().ToList();