在LinQ-to-entity中的where子句中转换为null,而不进行空值检查

时间:2014-04-25 08:50:33

标签: c# sql linq linq-to-entities

我知道我不能将带有'null'值的可空int转换为非可空的。

int? v = null;
int w = (int)v;

所以我开始使用null检查制作我的where子句。但是现在我看到它似乎仍然有效,即使没有它,这怎么可能?

我知道我有很多LogEmneId在数据库中为空。

foreach (var logMaaler in ctx.LogMaalers.Where(lm =>
              // (lm.LogEmneId != null && logEmner.Contains((short)lm.LogEmneId))
                                          logEmner.Contains((short)lm.LogEmneId)
                                                ))
{
}

LinQ-to-entity语句是否被重写为为我处理空检查的sql查询?

1 个答案:

答案 0 :(得分:3)

  

LinQ-to-entity语句是否被重写为为我处理空检查的sql查询?

有点儿。 Contains在SQL查询中转换为IN子句,可以正常使用NULL值。请考虑以下查询:

SELECT *
FROM Table
WHERE Id IN (1,2,3,4,5,6,7)

NULL列中有Id行时,它会正常工作。这就是这里发生的事情。