表达的结果总是“真实”。因为类型' int'的值绝不等于' null'类型' int?'不!0

时间:2015-11-24 13:04:17

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

我在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表的情况下进行此验证?

2 个答案:

答案 0 :(得分:6)

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

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

答案 1 :(得分:1)

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

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

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

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