我通过一个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
这怎么可能实现?
我通过一个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
这怎么可能实现?
您不能通过 Body 属性访问它吗?
var memberExpression = expression.Body as MemberExpression;
接着
memberExpression.Member.Name;
在不知道你想用它做什么的情况下,这是一个开始的例子:
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
的匿名属性名称。这可以重构为通用形式,您可以对其进行扩展。ProjectedName
RealName