When I
bool? isApproved = null;
db.Table.Where(item => item.IsApproved == isApproved).Count();
the last line value is 0. But when I
db.Table.Where(item => item.IsApproved == null).Count();
the value is correct.
我已经看到它是这样完成的:
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();