110,533
社区成员
发帖
与我相关
我的任务
分享
// 方法一,运行编译表达式来求值。
object Eval(MemberExpression member)
{
// cast对引用类型不是必须的,但返回值是结构就要cast。
var cast = Expression.Convert(member, typeof(object));
return Expression.Lambda<Func<object>>(cast).Compile().Invoke();
}
// 方法二,反射
private object Eval2(MemberExpression member)
{
var obj = (member.Expression as ConstantExpression).Value;
return (member.Member as FieldInfo).GetValue(obj);
}
// 测试
{
int m = 10;
Expression<Func<Student, bool>> la = (n => n.id == m );
var body = la.Body as BinaryExpression;
var right = Expression.Constant(Eval(body.Right as MemberExpression));
var updatedExp = body.Update(body.Left, body.Conversion, right);
var str = updatedExp.ToString(); // (n.id == 10)
}