Exemple #1
0
        Expression CreateLambdaBinary(CRLExpression expression)
        {
            var        left  = expression.Left;
            var        right = expression.Right;
            Expression exp;
            object     value;
            var        type = expression.ExpType;

            if (left.Type == CRLExpressionType.MethodCall)//按方法运算 如 b.NameSubstring,Indexof(0,1)=="123"
            {
                //按属性的子方法
                exp   = CreateLambdaMethodCall2(left);
                value = ObjectConvert.ConvertObject(exp.Type, right.Data);
            }
            else if (left.Type == CRLExpressionType.Tree)
            {
                exp   = CreateLambdaBinary(left);//todo 暂时在左边
                value = right.Data;
                //throw new CRLException("不支持的运算 "+ left.ExpressionType);
            }
            else//按属性运算 如b.Id==1
            {
                exp   = creater.CreatePropertyExpression(left.Data.ToString());
                value = right.Data;
            }

            switch (type)
            {
            case ExpressionType.Equal:
                return(creater.Equal(exp, value));

            case ExpressionType.NotEqual:
                return(creater.NotEqual(exp, value));

            case ExpressionType.GreaterThan:
                return(creater.Greater(exp, value));

            case ExpressionType.LessThan:
                return(creater.Less(exp, value));

            case ExpressionType.GreaterThanOrEqual:
                return(creater.GreaterThan(exp, value));

            case ExpressionType.LessThanOrEqual:
                return(creater.LessThan(exp, value));

            case ExpressionType.And:
                return(creater.And(exp, value));

            case ExpressionType.Or:
                return(creater.Or(exp, value));

            default:
                throw new CRLException("没有对应的运算方法 " + type);
            }
        }