Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何创建表达式<;Func<;t模型,t属性>>;;_C#_Asp.net Mvc_Html Helper - Fatal编程技术网

C# 如何创建表达式<;Func<;t模型,t属性>>;;

C# 如何创建表达式<;Func<;t模型,t属性>>;;,c#,asp.net-mvc,html-helper,C#,Asp.net Mvc,Html Helper,如果我有一个模型对象,是否可以创建可以在不同的HTMLHelper中使用的Expression()(例如在CheckBoxFor()中) this HtmlHelper<TModel> htmlHelper 此HtmlHelper HtmlHelper 属性的名称(通过反射)。确定: static Expression<Func<TModel,TProperty>> CreateExpression<TModel,TProperty>(

如果我有一个模型对象,是否可以创建可以在不同的HTMLHelper中使用的
Expression()
(例如在
CheckBoxFor()
中)

this HtmlHelper<TModel> htmlHelper
此HtmlHelper HtmlHelper
属性的名称(通过反射)。

确定:

static Expression<Func<TModel,TProperty>> CreateExpression<TModel,TProperty>(
    string propertyName)
{
    var param = Expression.Parameter(typeof(TModel), "x");
    return Expression.Lambda<Func<TModel, TProperty>>(
        Expression.PropertyOrField(param, propertyName), param);
}
静态表达式CreateExpression(
字符串属性名称)
{
var param=表达式参数(typeof(TModel),“x”);
返回表达式.Lambda(
Expression.PropertyOrField(param,propertyName),param);
}
然后:

var lambda=CreateExpression(“IsAlive”);

不!马克·格雷威尔不应该在这里!这是乔恩·斯基特的问题!谢谢!简单有效!我还有另一个相关的问题——如果在我看来有一个更复杂的属性,一个类的实例,该怎么办。所以,不仅仅是一个简单的字符串或布尔属性,而是一个内部有更多属性的对象。例如,我就是这样为这些“内部”属性“@Html.CheckBoxFor(m=>m.Config.All)”声明简单复选框的。是否可以创建这样的lambda,它将反映对象中的属性-“m=>m.Config.All”。@Anelook,您应该发布您的解决方案。@ErikPhilips参数表达式甚至不需要命名;我怀疑它只使用表达式树的
.ToString()
表示形式的名称。显然,如果对多个表达式使用相同的名称,则
ToString()
可能会有点混淆。
var lambda = CreateExpression<SomeModel, bool>("IsAlive");