【发布时间】:2017-12-11 11:07:06
【问题描述】:
我有一个DataSet,有一个列,我们称之为A,类型为Int。我想在 A 列上使用 where 运行一个简单的 LINQ 查询。问题是,该列 A 可以包含空值(至少在我得到它的T-SQL 表中,我不确定这些空值是如何在TableAdapter 中转换的)。当我尝试运行以下查询时,这会导致错误:
MyTableDataTable dt =
new MyTableDataTable();
MyTableTableAdapter ta =
new MyTableTableAdapter();
ta.Fill(dt);
// This is where the error occurs
var query = from tbl in dt.AsEnumerable()
where tbl.A == parentId
&& tbl.B == languageId
select new
{
tbl.A,
tbl.B,
tbl.C
};
它返回的错误信息是这样的:
StrongTypingException 未处理
未处理的类型异常 'System.Data.StrongTypingException' 发生在 我的程序.exe
附加信息:“A”列的值 表 'MyTable' 是 DBNull。
nullvalues 在这样的场景下应该如何上交?我想做where A is not null之类的事情,但我真的找不到办法……
【问题讨论】:
-
你想做
where tbl.A != null?听起来很容易... :) -
由于值为 DBNull
where tbl.A != DbNull.Value -
@Magnus 导致语法错误:“运算符 '!=' 不能应用于 'int' 和 'DBNull' 类型的操作数”
-
在这种情况下,
tbl.A永远不会是null。 -
在这种情况下,错误一定来自
ta.Fill(dt);可能dataTable 列A是int但应该是int?
标签: c# sql-server linq tsql dataset