将Expression<Func<TModel,Boolean?>>转换为Expression<Func<TModel,Boolean>>。

3
一个 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,这让我想知道这是否可能。
干杯。

1
如果您只想为可空布尔值设置默认值,请使用短语 nullableValue ?? false?? 将使用其值(如果有),如果没有,则使用您指定的值。 - Scott Mermelstein
嗯,该应用程序实际上并没有分配值。它只使用类来生成HTML模板,但它没有使用这些类的任何实例。 - vtortola
1个回答

1
如果您访问值属性(如intbool等),则不会获得MemberExpression,而是作为底层MemberExpressionUnaryExpression包装在内负责执行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问题,或许会对您有所帮助。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接