我需要创建以下Lambda表达式:
{d=>d.Name.NameEn}
我写了以下代码:
ParameterExpression parameter = Expression.Parameter(typeof(T), "d");
MemberExpression memberExpression = Expression.Property(parameter, typeof(T).GetProperty("Name"));
LambdaExpression lambda = Expression.Lambda(memberExpression, parameter);
输出:
{d => d.Name}
但我需要这个:
{d=>d.Name.NameEn}
如何制作?
更新
我的班级:
public class T
{
public U Name { get; set; }
}
public class U
{
public string NameEn { get; set; }
}
答案 0 :(得分:0)
在这种情况下,您需要将表达式包装在另一个MemberExpression中,例如:
var outerMemberExpression = Expression.Property(memberExpression, typeof(U).GetProperty("NameEn"));
并将其用于lambda表达式。毕竟,你有两个成员访问表达式:一个用于访问Name
,另一个用于访问NameEn
。
答案 1 :(得分:0)
您可以尝试:
ParameterExpression parameter = Expression.Parameter(typeof(T), "d");
MemberExpression memberExpression =
Expression.Property(parameter, typeof(T).GetProperty("Name"));
MemberExpression memberExpressionInner =
Expression.Property(memberExpression,
typeof(T).GetProperty("Name").PropertyType.GetProperty("NameEn"));
LambdaExpression lambda = Expression.Lambda(memberExpressionInner, parameter);
或者,如果在运行时已知U
(我在更新之前假设T
将是一个通用参数),则第三行可能是:
MemberExpression memberExpressionInner =
Expression.Property(memberExpression, typeof(U).GetProperty("NameEn"));