この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
これはどのように達成できますか?
何をしたいのか分からなくても、始めるための例を次に示します。
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