/// <summary> /// 生成SQL /// </summary> /// <param name="exp">表达式</param> /// <returns></returns> public void Init(Expression exp) { var obj = new ParserBuilder() { ArgumentsStartIndex = this.ArgumentsStartIndex }; obj.InitBuild(exp); this.Result = obj.Result; this.Arguments = new List <SqlParameter>(); foreach (DictionaryEntry item in obj.Arguments) { this.Arguments.Add(new SqlParameter(item.Key.ToString(), item.Value)); } }
/// <summary> /// 解析表达式 /// </summary> /// <param name="exp"></param> /// <returns></returns> public string ExpressionRouter(Expression exp) { var obj = new LambdaParser.ParserBuilder() { ArgumentsStartIndex = this.Parameters.Count }; obj.InitBuild(exp); this.Result = obj.Result; foreach (DictionaryEntry item in obj.Arguments) { if (item.Value == null) { var rex = "\\((.*?)" + item.Key.ToString() + "\\)"; var arr = Regex.Matches(this.Result, rex); foreach (var _temp in arr) { var name = ""; var value = ""; if (_temp.ToString().IndexOf("<>") > -1) { name = Regex.Split(_temp.ToString(), "<>")[0].Trim().Remove(0, 1);//移除左侧括号 value = " IS NOT NULL"; } else if (_temp.ToString().IndexOf("=") > -1) { name = Regex.Split(_temp.ToString(), "=")[0].Trim().Remove(0, 1); value = " IS NULL"; } this.Result = this.Result.Replace(_temp.ToString(), string.Format("({0} {1})", name, value)); } } else { this.Parameters.Add(new LambdaToSql.EntityModel.DataParameter(item.Key.ToString(), item.Value)); } } return(obj.Result); }