日期:2014-05-17  浏览次数:20784 次

Expression表达式动态组合问题
假如我有一个表达式
Expression<Func<TEntity, int>> IdExp = m => m.CID;
还有一个参数id(动态的)
我现在想生存一个表达式,这个表达式类似如下的,注意,这里我只能访问到IdExp表达式和id参数(这里假设id为1),如何组合这两个东西,使它变成一下的表达式:
Expression<Func<TEntity, bool>> exp = m => m.CID == 1;

------解决方案--------------------
        public static Expression<Func<TEntity, bool>> ConvertExpression(Expression<Func<TEntity, int>> IdExp, int value)
        {
            ParameterExpression para = IdExp.Parameters[0];
            MemberExpression member = (MemberExpression)IdExp.Body;
            ConstantExpression con = Expression.Constant(value);

            var left = Expression.Property(para, para.Type.GetProperty(member.Member.Name));
            var exp = Expression.Equal(left, con);

            return Expression.Lambda<Func<TEntity, bool>>(exp, para);
        }