2

我通过一个System.Linq.Expressions.Expression这样的方法->

Process<User>(x => new { UserId = x.Id, x.AccountNo })

private void Process<T>(Expression exp)
{
   // Get Alias ("UserId")
}

我想尝试获取列的别名,在这种情况下我"UserId"想要x.Id

这怎么可能实现?

4

2 回答 2

1

您不能通过 Body 属性访问它吗?

var memberExpression = expression.Body as MemberExpression;

接着

memberExpression.Member.Name;
于 2013-07-12T10:42:12.303 回答
1

在不知道你想用它做什么的情况下,这是一个开始的例子:

class Process
{
    public int UserId { get; set; }
    public int AccountNo { get; set; }
}

Process(p => new { UserId = p.UserId, p.AccountNo });    

public static void Process<T>(Expression<Func<Process, T>>  expression)
{
    var newExpression = (NewExpression) expression.Body;

    var propertiesAssignement =
        newExpression.Type.GetProperties().Zip(
            newExpression.Arguments.OfType<MemberExpression>(),
            (p, m) => new {ProjectedName = p.Name, RealName = m.Member.Name}
        );
}

该变量将为您提供带有原始属性名称propertiesAssignment的匿名属性名称。这可以重构为通用形式,您可以对其进行扩展。ProjectedNameRealName

于 2013-07-12T11:07:28.613 回答