比较LINQ表达式中的空值

时间:2014-10-29 10:55:16

标签: c# linq entity-framework null

我有一个带有“t_cftc_ir_swaps”的表,其中包含以下字段

T_CFTC_IR_SWAP_ID       Integer (Autonumber, PK)
PRODUCT                 Varchar
TRADEVOLUME_TYPE        Varchar
TRADEVOLUME_BUCKET_1    Varchar
TRADEVOLUME_BUCKET_2    Varchar
TRADEVOLUME_GROUP       Varchar
TRADEVOLUME             Integer
RELEASE_DATE            Date
TRADE_DATE              Date

我在代码级使用Entity Framework。我试图在此表中插入记录。但在此之前,我正在检查表中是否已存在记录。为此,我有一个“RecordAlreadyExists”功能代码如下

Record already exists function

现在在数据表中的一些记录中,我们有“TRADEVOLUME_BUCKET_2”的空值,但是当我尝试比较正在添加的记录(与TRADEVOLUME_BUCKET_2的空值)和基础表时,插入新记录时记录它返回“0”记录,即使我可以查询数据库并查看表中是否有匹配的记录。

在代码中断时,这是我要插入的记录。如您所见,它对“TRADEVOLUME_BUCKET_2”

具有空值

Code at runtime

与我们尝试添加的记录匹配的记录数为“0”

enter image description here

当我在数据库级别运行查询时,我确实在基础表中获得了匹配记录

data query query result

我甚至尝试在代码中使用DBNull,如下所示

use of db null

但是当我尝试在运行时执行此操作时,请获取以下异常 “无法创建'System.Object'类型的空常量值。在此上下文中仅支持实体类型,枚举类型或基元类型“

db null exception

如何使用LINQ查询比较空值?

3 个答案:

答案 0 :(得分:1)

尝试为您的财产提供默认值。我认为你面临的问题是没有在Linq中比较NULL ...但是默认值如空字符串是。

查看这些链接

答案 1 :(得分:1)

尝试专门寻找null

public bool RecordAlreadyExists(object cftcRecord)
{
    var _intExistingCount = 0;
    var _record = cftcRecord as T_CFTC_IR_SWAPS;
    if (_record != null)
    {
        _intExistingCount = 
        CftcContext.T_CFTC_IR_SWAPS.Count(
            rec => _record.TRADEVOLUME_BUCKET_2 == null 
                    ? rec.TRADEVOLUME_BUCKET_2 == null 
                    : _record.TRADEVOLUME_BUCKET_2 == rec.TRADEVOLUME_BUCKET_2
            );
    }
    // More code...
}

我稍微更改了您的代码(将问题中的代码包含在 text 中更好,以便回复者可以复制它)。我认为这是您遇到的问题:http://data.uservoice.com/forums/72025-ado-net-entity-framework-ef-feature-suggestions/suggestions/1015361-incorrect-handling-of-null-variables-in-where-cl

答案 2 :(得分:-1)

对DBNull.Value以外的其他内容使用null coalescing运算符。