我对以下代码有一个奇怪的问题:
!isActive.HasValue || (isActive.HasValue && x.IsActive == isActive.Value)
isActive
是一个bool?
类型,所以如果isActive
是null
,那么我会得到以下错误:
可空对象必须有一个值。
有什么想法吗?谢谢你的帮助!
更新1:
public static List<User> Select(int userId, bool? isActive = null)
{
var dl = DataLayer.GetDataContext();
return dl.Users.Where(x => x.ID == userId
&& (!isActive.HasValue || (isActive.HasValue && x.IsActive == isActive.Value))).ToList();
}
这是我收到此错误的示例函数。我知道这很奇怪!如果我像下面这样更改,它将起作用:
!isActive.HasValue || (isActive.HasValue && x.IsActive == isActive)
我理解这个错误的意思,但我不明白为什么。我认为它应该有效。所以我称之为奇怪的东西!
更新 2:
- x.IsActive 是 bool 类型,而不是 bool?。我确信它:)
- DataLayer.GetDataContext() 用于 Linq to SQL。
可能是因为我使用的是 SQL Server 吗?
谢谢你们到目前为止的帮助。