C# 转换表达式<;Func<;t模型,布尔值?>&燃气轮机;表达<;Func<;t模型,布尔值>&燃气轮机;

C# 转换表达式<;Func<;t模型,布尔值?>&燃气轮机;表达<;Func<;t模型,布尔值>&燃气轮机;,c#,generics,lambda,expression-trees,expression,C#,Generics,Lambda,Expression Trees,Expression,ASP.NET MVC中的一个方法需要一个表达式expression(在屏幕上显示一个复选框HTML控件),但我的成员是Boolean? 在我们的例子中,对于这种特定情况,null与false相同,必须显示一个未选中的HTML复选框 如何将Expression转换为Expression添加类似value=nullableValue.HasValue&&nullableValue.value的内容 请记住,结果的表达式必须仍然是成员表达式,这让我想知道这是否可能 干杯。如果您正在访问一个值属性(如

ASP.NET MVC中的一个方法需要一个表达式
expression
(在屏幕上显示一个复选框HTML控件),但我的成员是
Boolean?

在我们的例子中,对于这种特定情况,
null
false
相同,必须显示一个未选中的HTML复选框

如何将
Expression
转换为
Expression
添加类似
value=nullableValue.HasValue&&nullableValue.value的内容

请记住,结果的
表达式
必须仍然是
成员表达式
,这让我想知道这是否可能


干杯。

如果您正在访问一个值属性(如
int
bool
等),您将不会得到
MemberExpression
,而是
UnaryExpression
,因为底层的
MemberExpression
被包装在负责执行
Convert
操作的
UnaryExpression

这似乎是因为值类型不是引用类型,并且不接受
null

如果您愿意接受获取
UnaryExpression
,可以通过以下方式进行:

Expression<Func<TModel, Boolean?>> source = ...

var resultBody = Expression.Convert(source.Body, typeof(Boolean));    
var result = Expression.Lambda<Func<TModel, Boolean>>(resultBody, source.Parameters);
表达式源=。。。
var resultBody=Expression.Convert(source.Body,typeof(Boolean));
var result=Expression.Lambda(resultBody,source.Parameters);

您可能会觉得有用的堆栈溢出

如果您只想为可空布尔值指定一个默认值,请使用短语
nullableValue??错误
??
如果有值,将使用它的值,如果没有,则使用您指定的值。好吧,应用程序实际上并没有赋值。它只使用这些类来生成HTML模板,但不使用这些类的任何实例。