我在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表的情况下进行此验证?
答案 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的字节值被静默转换(返回)为可空字节,因此空值检查有意义。