无法强制转换类型为'的对象;在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
- 空 数学
我该如何解决这个问题?指引我。
对于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();