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
,这让我想知道这是否可能。
干杯。
答案 0 :(得分:1)
如果你正在接受一个价值属性(例如int
,bool
等),你将不会获得MemberExpression
而是UnaryExpression
作为基础MemberExpression
}被包含在UnaryExpression
中,负责执行Convert
操作。
这似乎是因为值类型不是引用类型而不接受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 question。