internal MethodCallExpression CreateLambdaMethodCall2(CRLExpression expression) { var creater = new LambdaCreater <T>(); var arry = expression.Data.ToString().Split('|'); var propertyName = arry[0]; var methodName = arry[1]; var args = expression.Data.ToString().Substring(propertyName.Length + methodName.Length + 2); var dic = new Dictionary <string, MethodResultHandler>(); dic.Add("Substring", creater.Substring); dic.Add("IndexOf", creater.IndexOf); if (!dic.ContainsKey(methodName)) { throw new Exception("没有对应的方法 " + methodName); } return(dic[methodName](propertyName, args.Split(','))); }
Expression <Func <T, bool> > CreateLambdaMethodCall(CRLExpression expression) { var creater = new LambdaCreater <T>(); var arry = expression.Data.ToString().Split('|'); var propertyName = arry[0]; var methodName = arry[1]; var args = expression.Data.ToString().Substring(propertyName.Length + methodName.Length + 2); var dic = new Dictionary <string, MethodHandler>(); dic.Add("Like", creater.Contains); dic.Add("Contains", creater.Contains); dic.Add("StartsWith", creater.StartsWith); dic.Add("EndsWith", creater.EndsWith); if (!dic.ContainsKey(methodName)) { throw new Exception("没有对应的方法 " + methodName); } return(dic[methodName](propertyName, args.Split(','))); }
Expression <Func <T, bool> > CreateLambdaBinary(CRLExpression expression) { var left = expression.Left; var right = expression.Right; var creater = new LambdaCreater <T>(); var type = expression.ExpressionType; if (left.Type == CRLExpressionType.MethodCall)//按方法 如 Substring,Indexof { var dic = new Dictionary <string, BinaryMethodHandler>(); dic.Add("Equal", creater.Equal); dic.Add("NotEqual", creater.NotEqual); dic.Add("Greater", creater.Greater); dic.Add("Less", creater.Less); dic.Add("GreaterThan", creater.GreaterThan); dic.Add("LessThan", creater.LessThan); if (!dic.ContainsKey(type)) { throw new Exception("没有对应的运算方法 " + type); } var left2 = CreateLambdaMethodCall2(left); var value = ObjectConvert.ConvertObject(left2.Type, right.Data); return(dic[type](left2, value)); } else { var dic = new Dictionary <string, BinaryHandler>(); dic.Add("Equal", creater.Equal); dic.Add("NotEqual", creater.NotEqual); dic.Add("Greater", creater.Greater); dic.Add("Less", creater.Less); dic.Add("GreaterThan", creater.GreaterThan); dic.Add("LessThan", creater.LessThan); if (!dic.ContainsKey(type)) { throw new Exception("没有对应的运算方法 " + type); } return(dic[type](left.Data.ToString(), right.Data)); } }