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); } }