2017-06-01 26 views
-3

心中已经建立的方法来动态构建这样的表达,下面是我的代码:如何获得建立表达式(C => c.user.code ==“XXX”)动态

public static Expression<Func<T, bool>> BuildStringEqualLambda(string propertyName, string propertyValue) 
{ 
    ParameterExpression parameterExp = Expression.Parameter(typeof(T), "type"); 
    Expression propertyExp = Expression.Property(parameterExp, propertyName); 
    Expression right = Expression.Constant(propertyValue); 
    Expression e1 = Expression.Equal(propertyExp, right); 
    return Expression.Lambda<Func<T, bool>>(e1, new ParameterExpression[] { parameterExp }); 
} 

但是,如果拉姆达像

c=>c.user.code == 'XXX' 

,我调用方法如下图所示:

BuildStringEqualLambda("user.code","XXX"); 

的方法报告错误。

所以我的问题是如何获得建设表达式(C => c.user.code == 'XXX')动态

+2

“该方法无法处理它。”你甚至认为这是什么意思? –

回答

1

的相反:

ParameterExpression parameterExp = Expression.Parameter(typeof(T), "type"); 
Expression propertyExp = Expression.Property(parameterExp, propertyName); 

你需要去每个更深物业:

ParameterExpression parameterExp = Expression.Parameter(typeof(T), "type"); 
Expression propertyExp = parameterExp; 
foreach (var property in propertyName.Split('.')) { 
    propertyExp = Expression.PropertyOrField(propertyExp, property); 
} 
+0

propertyExp的初始值是什么? – user2155362

+0

@ user215536​​2我更新了我的答案 –

相关问题