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"。

有什么想法吗?

LINQ和检查=无效的

这看起来像一个类型化的数据集,它: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显然我需要阅读键入的数据集:)以及为什么我永远不应该使用它们