3

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必须仍然是 a MemberExpression,这让我想知道这是否可能。

干杯。

4

1 回答 1

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问题。

于 2013-03-04T16:39:40.630 回答