作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在尝试构建 Odata 表达式的解析器,但当该字段可为空时出现错误。
public class UserRight
{
public bool? active
}
public void Test(){
Expression<Func<UserRight, bool>> expression = p => p.Active == true;
}
它生成以下表达式:
{p => (p.Active == Convert(True, Nullable`1))}
但我想收到它作为
{p => (p.Active == True)}
为了避免这种“转换”。有没有简单的方法可以做到这一点?因为我的解析器已准备就绪,我不想仅仅因为一个可为空的字段而重建它。
最佳答案
不,没有办法避免它。您调用的运算符接受 bool?
,而不是 bool
,因此参数必须是bool?
,否则无法编译。存在从 bool
到 bool?
的隐式转换,这可以从 convert 表达式中看出。如果没有这种隐式转换,它就不是一个有效的表达式。
理论上您可以手动构建您自己的表达式,该表达式使用真正的可空 bool 常量值,但没有办法让 lambda“自动”生成这样的表达式,并且尝试创建新表达式几乎肯定是更多工作而不是简单地让您的查询提供程序处理转换表达式。
关于c# - 如何在 lambda 表达式中忽略转换为可空?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50589640/
我是一名优秀的程序员,十分优秀!