确实是一个简单的问题。
我有一个显示 Nullable Bool 的 MVC View ,例如,
Html.CheckBoxFor(model=>model.NullableBoolHere, Model.NullableBoolHere,
我想创建一个新的 html 助手,它将接受这种类型,然后进行转换
Null || False => False
True => True
所以我有以下内容
public static MvcHtmlString CheckBoxFor<TModel>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, bool?>> expression, object htmlAttributes, bool disabled)
{
IDictionary<string, object> values = new RouteValueDictionary(htmlAttributes);
if (disabled)
values.Add("disabled", "true");
Expression<Func<TModel, bool>> boolExpression = CONVERT_TO_BOOL_HERE(expression);
return htmlHelper.CheckBoxFor(expression, values);
}
感谢任何帮助,我知道我将不得不使用递归来复制表达式,但只是不确定如何导航表达式本身,找到 bool?,转换为 bool。
最佳答案
您可以使用此代码:
var body = Expression.Coalesce(expression.Body, Expression.Constant(false));
var boolExpression = (Expression<Func<TModel, bool>>)
Expression.Lambda(body, expression.Parameters.First());
其他答案的优点是它不会编译第一个表达式,它只是包装它。生成的表达式与此代码创建的表达式类似:
m => m.NullableBoolHere ?? false
关于asp.net-mvc - 将 Expression<Func<T, bool?>> 转换为 Expression<Func<T, bool>>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14356611/