gpt4 book ai didi

c# - 如何在 lambda 表达式中忽略转换为可空?

转载 作者:太空狗 更新时间:2023-10-30 00:48:03 24 4
gpt4 key购买 nike

我正在尝试构建 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?,否则无法编译。存在从 boolbool? 的隐式转换,这可以从 convert 表达式中看出。如果没有这种隐式转换,它就不是一个有效的表达式。

理论上您可以手动构建您自己的表达式,该表达式使用真正的可空 bool 常量值,但没有办法让 lambda“自动”生成这样的表达式,并且尝试创建新表达式几乎肯定是更多工作而不是简单地让您的查询提供程序处理转换表达式。

关于c# - 如何在 lambda 表达式中忽略转换为可空?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50589640/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com