2

LINQ直到 30 分钟前从未在 C# 中使用过,并且正在努力在线查找我的查询的答案(可能是由于我缺乏理解)。

我有一个简单的查询

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.Value 但编译器声明“ Operation != cannot be applied to operands of type int and system.DBNull”。

有任何想法吗?

4

4 回答 4

6

这看起来像一个类型化的数据集,它:yeuch -停止使用那些,但我离题了。

因此,a.column3如果该值为 ,访问将始终引发异常DBNull。您需要使用类型化数据集模式:

&& !c.Iscolumn3Null()
于 2013-07-03T12:16:03.683 回答
0

tableName.AsEnumerable()在内存中进行查询,因此所有表行都从数据库下载,并在应用程序上检查条件。

试试看:

var variableName = from a in tableName
                   where a.column1 == item1
                       && a.column2 == item2
                       && a.column3 != null
                   select a;

它应该被翻译成一个 SQL 查询并且只下载必要的行。

于 2013-07-03T12:10:41.763 回答
0

尝试

var variableName = from a in tableName.AsEnumerable()
    where a.column1 == item1
        && a.column2 == item2
        && !DBNull.Value.Equals(a.column3)
    select a;

编辑显然我需要阅读类型化的数据集:) 以及为什么我永远不应该使用它们

于 2013-07-03T12:12:20.303 回答
0

尝试这个..

var variableName = from a in tableName.AsEnumerable()
    where a.column1 == item1
        && a.column2 == item2
        && a.column3 != dbnull.value
    select a;
于 2013-07-03T12:13:45.607 回答