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

何をしたいのか分からなくても、始めるための例を次に示します。

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 に答える