在30分钟之前从未在C#中使用过LINQ
,并且我很难在线查找我的查询答案(可能是由于我缺乏了解)。
我有一个简单的查询
var variableName = from a in tableName.AsEnumerable()
where a.column1 == item1
&& a.column2 == item2
&& a.column3 != null
select a;
SQL列定义为int,null。
当代码遇到column3
数据库上的空记录时,会生成以下错误“the value for column3 in table <tableName> is DBNull
”。
而不是检查!= null
,我想我应该使用其他东西,但是尝试检查DBNull
。值但编译器声明“Operation != cannot be applied to operands of type int and system.DBNull
”。
有什么想法吗?
答案 0 :(得分:6)
这看起来像一个类型化的数据集,其中:是的 - 停止使用这些,但我离题了。
因此,如果该值为a.column3
,则访问DBNull
将始终引发异常。您需要使用typed-dataset模式:
&& !c.Iscolumn3Null()
答案 1 :(得分:0)
tableName.AsEnumerable()
使查询在内存中,因此所有表行都从DB下载,并且在应用程序上检查条件。
试试:
var variableName = from a in tableName
where a.column1 == item1
&& a.column2 == item2
&& a.column3 != null
select a;
它应该被翻译成SQL查询并只下载必要的行。
答案 2 :(得分:0)
试
var variableName = from a in tableName.AsEnumerable()
where a.column1 == item1
&& a.column2 == item2
&& !DBNull.Value.Equals(a.column3)
select a;
编辑显然我需要阅读类型数据集:)以及为什么我永远不应该使用它们
答案 3 :(得分:0)
试试这个..
var variableName = from a in tableName.AsEnumerable()
where a.column1 == item1
&& a.column2 == item2
&& a.column3 != dbnull.value
select a;