2014-10-29 51 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合併運算符。