Linq Expression to String

soh*_*dyn 2 c# linq lambda

这是MVC中一个转换为html标签的简单方法.

@Html.HiddenFor(model => model.myName);
Run Code Online (Sandbox Code Playgroud)

这被转换成下面的html.

<input type="hidden" name="myName" value="ABC..." />
Run Code Online (Sandbox Code Playgroud)

如何将此表达式转换为字符串.让我们假设如果我想编写这种方法,我怎么知道属性名称及其值.假设来自HiddenFor参数,将如何提取myName和myName值.这不是MVC特有的,但与LINQ表达式有关.

非常感谢提前.

Hei*_*nzi 6

这与LINQ无关(除了LINQ大量使用那些"表达式树").

model => model.MyProperty是一个lambda表达式,当被视为一个而不仅仅是一个时,可以解析Expression<Func<Model, T>>Func<Model, T>.

让我用(主要是不言自明的)例子回答你的问题:

public static string GetPropertyName<T>(Expression<Func<Model, T>> expr)
{
    var member = (MemberExpression)expr.Body;
    var property = (PropertyInfo)member.Member;
    return property.Name;
}
Run Code Online (Sandbox Code Playgroud)

可以使用如下:

public class Model
{
    public int MyProperty { get; set; }
}

static void Main(string[] args)
{
    // Prints "MyProperty"
    Console.WriteLine(GetPropertyName(model => model.MyProperty));
}
Run Code Online (Sandbox Code Playgroud)