我曾看到过以下做法:
db.Table.Where(
item => item.IsApproved.HasValue == isApproved.HasValue &&
(!item.IsApproved.HasValue || item.IsApproved.Value==isApproved.Value )
).Count();
嗯,我以前遇到过这个问题,我记得问题在于将LINQ查询转换为SQL语句。
第二个表达式在SQL中有一个等号:
Where IsAproved is null
但是第一个表达式没有,因为它是数据库中的值与C#可空变量之间的比较。
为了解决这个问题,我建议尝试:
db.Table.Where(item => isApproved != null ? item.IsApproved == isApproved.Value
: item.IsApproved == null).Count();
我不知道性能损失情况,但它可以工作
bool? isApproved = null;
db.Table.Where(item => item.IsApproved == isApproved ||
!(item.IsApproved.HasValue || isApproved.HasValue))
.Count();
db.Table.Where(item => item.IsApproved == isApproved.Value).Count();