我有一个带有“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”功能代码如下
现在在数据表中的一些记录中,我们有“TRADEVOLUME_BUCKET_2”的空值,但是当我尝试比较正在添加的记录(与TRADEVOLUME_BUCKET_2的空值)和基础表时,插入新记录时记录它返回“0”记录,即使我可以查询数据库并查看表中是否有匹配的记录。
在代码中断时,这是我要插入的记录。如您所见,它对“TRADEVOLUME_BUCKET_2”
具有空值
与我们尝试添加的记录匹配的记录数为“0”
当我在数据库级别运行查询时,我确实在基础表中获得了匹配记录
我甚至尝试在代码中使用DBNull,如下所示
但是当我尝试在运行时执行此操作时,请获取以下异常 “无法创建'System.Object'类型的空常量值。在此上下文中仅支持实体类型,枚举类型或基元类型“
如何使用LINQ查询比较空值?
答案 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运算符。