LINQ和检查=无效的
本文关键字:无效 检查 LINQ | 更新日期: 2023-09-27 18:20:54
直到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
为null的记录时,将生成以下错误"the value for column3 in table <tableName> is DBNull
"。
与其检查!= null
,我想我应该使用其他东西,但已经尝试检查DBNull
.Value,但编译器状态为"Operation != cannot be applied to operands of type int and system.DBNull
"。
有什么想法吗?
这看起来像一个类型化的数据集,它:yeuch-停止使用那些,但我离题了。
因此,如果访问a.column3
的值是DBNull
,则该值将始终引发异常。您需要使用类型化数据集模式:
&& !c.Iscolumn3Null()
tableName.AsEnumerable()
在内存中进行查询,因此所有表行都从DB中下载,并在应用程序上检查条件。
试试看:
var variableName = from a in tableName
where a.column1 == item1
&& a.column2 == item2
&& a.column3 != null
select a;
它应该被翻译成SQL查询,并且只下载必要的行。
试试这个。。
var variableName = from a in tableName.AsEnumerable()
where a.column1 == item1
&& a.column2 == item2
&& a.column3 != dbnull.value
select a;
尝试
var variableName = from a in tableName.AsEnumerable()
where a.column1 == item1
&& a.column2 == item2
&& !DBNull.Value.Equals(a.column3)
select a;
edit显然我需要阅读键入的数据集:)以及为什么我永远不应该使用它们