将 Expression> 转换为 Expression>

2024-05-20

确实很简单的问题。

我有显示 Nullable Bool 的 MVC 视图,例如,

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

现场查看 http://ideone.com/R5rrhi.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 Expression> 转换为 Expression> 的相关文章