【问题标题】:Casting a nullable in where clause in LinQ-to-entity without null-check在没有空检查的情况下在 LinQ-to-entity 的 where 子句中强制转换为空
【发布时间】:2014-04-25 08:50:33
【问题描述】:

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

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

所以我开始使用空检查来创建 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 语句是否被重写为为我处理 null 检查的 sql 查询?

【问题讨论】:

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


    【解决方案1】:

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

    有点。 Contains 被转换为 SQL 查询中的 IN 子句,它与 NULL 值一起工作得很好。考虑以下查询:

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

    当您在Id 列中有一行包含NULL 时,它会正常工作。这正是这里发生的事情。

    【讨论】:

    • 谢谢,那么我将跳过我自己的检查是否多余。
    猜你喜欢
    • 2011-12-07
    • 2021-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多