LINQ并检查!= null

时间:2013-07-03 12:08:13

标签: c# linq-to-sql

在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”。

有什么想法吗?

4 个答案:

答案 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;