Ejemplo n.º 1
0
        /// <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));
            }
        }
Ejemplo n.º 2
0
        /// <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);
        }