2014-10-29 58 views
1

我有一个“t_cftc_ir_swaps”一表以下字段空值在LINQ比较表达式

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 

我使用实体框架的代码级别。我正试图在此表中插入一条记录。但在此之前,我正在检查表中是否存在该记录。为此目的,我有一个“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

但出现以下情况例外,当我尝试这样做,在运行时 “无法创建类型的空恒定值“系统。目的'。只有实体类型,枚举类型或基本类型在这种情况下”

db null exception

我应该如何比较使用LINQ查询空值的支持?

+0

EF向数据库发送什么查询? – 2014-10-29 11:07:31

+0

您使用哪个版本的EF? – RobH 2014-10-29 11:17:17

+0

@GertArnold - EntityFramework,Version = 5.0.0.0 – Asif 2014-10-29 11:31:47

回答

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... 
} 

我稍微改变你的代码(最好是包括代码在你的问题as text so answerers can copy it)。我认为这是您遇到的问题:http://data.uservoice.com/forums/72025-ado-net-entity-framework-ef-feature-suggestions/suggestions/1015361-incorrect-handling-of-null-variables-in-where-cl

+0

检查空值已成功。谢谢您的帮助 – Asif 2014-10-29 14:00:31

-1

在除了DBNull.Value之外的其他位置上使用null合并运算符。