예제 #1
0
        protected virtual void ExpressionParse(UnaryExpression expression)
        {
            if (!(expression.Operand is MemberExpression))
            {
                ExpressionParse(expression.Operand);
                return;
            }
            var member = new MemberInfoEx(((MemberExpression)expression.Operand).Member);

            switch (expression.NodeType)
            {
            case ExpressionType.Not:
                Params.Add(ConstSet.True);
                sb.Append(CloumnName(member.Name) + " " + ConstSet.Eq + " " + ConstSet.ParamChar);
                break;

            case ExpressionType.NotEqual:
                Params.Add(ConstSet.False);
                sb.Append(CloumnName(member.Name) + " " + ConstSet.Eq + " " + ConstSet.ParamChar);
                break;

            case ExpressionType.Convert:
                Params.Add(member.GetValue(null));
                sb.Append(ConstSet.ParamChar);
                break;

            default:
                sb.Append(CloumnName(member.Name));
                break;
            }
        }
예제 #2
0
        protected object GetMemberExpressionValue(MemberExpression expression)
        {
            var member = new MemberInfoEx(expression.Member);
            var exp    = expression.Expression;

            if (exp is ConstantExpression)
            {
                return(member.GetValue(((ConstantExpression)exp).Value));
            }
            else if (exp == null)
            {
                return(member.GetValue(null));
            }
            else if (exp is MemberExpression)
            {
                return(member.GetValue(GetMemberExpressionValue((MemberExpression)exp)));
            }
            return(null);
        }