【问题标题】:The result of the expression is always 'true' since a value of type 'int' is never equal to 'null' of type 'int?' not !0表达式的结果始终为“真”,因为“int”类型的值永远不会等于“int?”类型的“null”。不是!0
【发布时间】:2015-11-24 21:13:43
【问题描述】:

我在 EF 中有这部分查询

状态为字节。

我试试parameters.Status.Value != 0
但对我来说,它并没有解决,因为 0 是一个摆在桌面上的值

它下面的方式显示错误: The result of the expression is always 'true' since the value of type 'int' is never equal to 'null' of type 'int?'

if (parameters.Status.Value != null)
            {
                query = query.Where(x => x.Status== parameters.Status);
            }

            try
            {

                return query
                    .Sort(parameters, x => x.Id)
                    .Paginate(parameters);
            }
            catch (Exception exception)
            {
                throw new Exception(this.context.Database.Connection.ConnectionString, exception);
            }

在我看来 如果用户没有选择任何值,它不应该通过这个条件如果

obs .: 没有选择它是空值。
如何在不取 0 表的情况下进行此验证?

【问题讨论】:

  • 也许你应该检查parameters.Status.Value != 0而不是null
  • 那个输入参数可以像'int?状态'
  • 请显示parameters 是其实例的类的代码。

标签: c# entity-framework asp.net-mvc-4


【解决方案1】:

使用正确的格式来检查它是否有价值

if (parameters.Status.HasValue)
{
    query = query.Where(x => x.Status== parameters.Status.Value);
}

【讨论】:

    【解决方案2】:

    我猜parameters.Status 的类型实际上是byte?,因为byte 没有.Value 属性。

    如果是,请检查parameters.Status != null,然后使用x.Status == parameters.Status.Value

    可空类型的.Value 将值转换为非可空版本(如果为空则爆炸)。所以 .Value 本身永远不能为空。

    该行编译(带有警告),因为 Status.Value 的字节值被静默转换(返回)为可空字节,因此空检查有意义。

    【讨论】:

    • parameters.Status 是一个字节
    • @OAprendiz 如果是byte,那么它就没有Value 属性。
    猜你喜欢
    • 2011-10-09
    • 2021-07-23
    • 2013-08-19
    • 2011-09-05
    • 2021-12-30
    • 2017-11-22
    • 1970-01-01
    • 2022-01-25
    • 1970-01-01
    相关资源
    最近更新 更多