转换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?
。
在我们的例子中,对于这个特定的情况,null
与false
相同,必须显示一个未选中的HTML复选框。
我如何从Expression<Func<TModel,Boolean?>>
转换到Expression<Func<TModel,Boolean>>
添加value = nullableValue.HasValue && nullableValue.Value
之类的东西?
请记住,生成的Expression
必须仍然是MemberExpression
,这让我怀疑这是否可能。
欢呼。
如果您正在访问一个值属性(如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问题。