转换Expression< Func< TModel,布尔?在祝辞Expression< Func< TModel,

本文关键字:Func TModel Expression 布尔 lt 转换 | 更新日期: 2023-09-27 18:02:13

ASP中的一个方法。. NET MVC期望一个表达式Expression<Func<TModel,Boolean>>(在屏幕上显示一个复选框HTML控件),但我的成员是Boolean?

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

我如何从Expression<Func<TModel,Boolean?>>转换到Expression<Func<TModel,Boolean>>添加value = nullableValue.HasValue && nullableValue.Value之类的东西?

请记住,生成的Expression必须仍然是MemberExpression,这让我怀疑这是否可能。

欢呼。

转换Expression< Func< TModel,布尔?在祝辞Expression< Func< TModel,

如果您正在访问一个值属性(如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);

一个你可能会觉得有用的stackoverflow问题。