无法强制转换类型为'的对象;在linq查询

本文关键字:对象 查询 linq 转换 类型 | 更新日期: 2023-09-27 18:18:39

我有以下查询使用DataTable给出错误:"无法强制转换'System '类型的对象。DBNull' to type 'System。字符串"

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

特殊化可以是:

  • ENG
  • 数学

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

无法强制转换类型为'的对象;在linq查询

对于r["SPECLIZATION"],它可以为null,但在检查它是否为null之前,您先将其转换为字符串,因此异常会抛出:无法转换类型为'System的对象。DBNull' to type 'System。字符串'

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

当试图将DBNull转换为string时,(string)r["SPECLIZATION"] != null是失败的,只需这样做:

r["SPECLIZATION"] != DBNull.Value

只使用。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();