public void 查询条件添加不通的where() { var Name = "测试bool修改2"; //var Content = "测试bool修改2"; //var arrEditCount = new int[5] { 22, 2, 3, 5, 1 }; // DateTime?startDate = new DateTime(2018, 10, 17); DateTime?endDate = ((DateTime)startDate).AddDays(1); var IsDel = false; //时间类型现在获取不到 Expression <Func <LockPers, bool> > expression = w => w.Name == Name && w.InsertTime >= startDate && w.InsertTime < endDate //&& w.InsertTime > // SM.DateStr(InserTime) //&& SM.In(w.EditCount, arrEditCount) && w.IsDel == IsDel; StringBuilder sql = null; DynamicParameters spars = null; AnalysisExpression.VisitExpression(expression, ref sql, ref spars); Console.WriteLine(sql); // expression = w => w.Content == Content; foreach (var name in spars.ParameterNames) { Console.WriteLine(name); WriteJson(spars.Get <object>(name)); } }
public void In测试2() { //var Name = "测试bool修改2"; //2 in 声明数组变量当参数传入 走参数化查询 var arrEditCount = new int[5] { 22, 2, 3, 5, 1 }; // Expression <Func <LockPers, bool> > expression = w => SM.In(w.EditCount, arrEditCount) //&& w.Name == Name && (w.Prompt.Contains("%hou%") || w.IsDel == false); StringBuilder sql = null; DynamicParameters spars = null; AnalysisExpression.VisitExpression(expression, ref sql, ref spars); foreach (var name in spars.ParameterNames) { Console.WriteLine(name); WriteJson(spars.Get <object>(name)); } Console.WriteLine(sql); var example = " "; Console.WriteLine(example); // var datearr = new DateTime[2] { new DateTime(18, 11, 28), new DateTime(18, 11, 22) }; // && SM.In(w.UpdateTime, datearr) // //and EditCount in ('18/11/28', '18/11/22') // Assert.Fail(); //断言 //var objs = LockDapperUtilsqlite<LockPers>.Get(expression); //WriteJson(objs); }
internal void RegisterAssignment(PropGraphNodeDescriptor lhsNode, AnalysisExpression rhs) { if (lhsNode != null && rhs != null && Utils.IsTypeForAnalysis(rhs.GetAnalysisType())) { this.StatementProcessor.RegisterAssignment(lhsNode, rhs.GetAnalysisNode()); } }
private void ProcessReturnAnalysisExpression(AnalysisExpression analysisExpression) { if (this.RetVar != null && analysisExpression != null) { analysisExpression.ProcessAssignment(this.RetVar, this); } }
internal void RegisterCallLHS(VariableNode lhsNode, AnalysisExpression rhsExpression) { Contract.Assert(rhsExpression.GetAnalysisNode() is AnalysisCallNode); var callNode = (AnalysisCallNode)rhsExpression.GetAnalysisNode(); this.StatementProcessor.RegisterCallLHS(callNode, lhsNode); }
internal void RegisterAssignment(AnalysisExpression lhs, AnalysisExpression rhs) { Contract.Assert(lhs is Field || lhs is Identifier); if (lhs != null) { this.RegisterAssignment(lhs.GetAnalysisNode(), rhs); } }
public void bool测试() { Expression <Func <LockPers, bool> > expression = t => t.Name.Contains("%蛋蛋%") && t.IsDel == false; StringBuilder sql = null; DynamicParameters spars = null; AnalysisExpression.VisitExpression(expression, ref sql, ref spars); Console.WriteLine(sql); var objs3 = LockDapperUtilTest <LockPers> .New.Get(expression); WriteJson(objs3); }
public void 括号优先级连接数据库测试() { Expression <Func <LockPers, bool> > expression = w => w.IsDel != true ; StringBuilder sql = null; DynamicParameters spars = null; AnalysisExpression.VisitExpression(expression, ref sql, ref spars); Console.WriteLine(sql); var example = "IsDel != 1 and (name like '%蛋蛋%' or name like '%大疆%' or Prompt like '%_%') and EditCount in (1, 2, 3) and InsertTime > '2017-11-01 00:00:00' "; Console.WriteLine(example); }
public void 查询条件添加不通的where2() { //1 //Expression<Func<LockPers, bool>> expression1 = w => w.Name == ""; //Expression<Func<LockPers, bool>> expression2 = w => w.IsDel == true; //Expression<Func<LockPers, bool>> expression3 = w => w.Content == ""; //Expression<Func<LockPers, bool>> expression4 = expression3.And(expression1.Or(expression2)); //2 var arrEditCount = new int[6] { 22, 2, 3, 5, 1, 11 }; // DateTime?startDate = new DateTime(2018, 10, 17); DateTime?endDate = ((DateTime)startDate).AddDays(1); DateTime?startDate2 = new DateTime(2018, 3, 17); DateTime?endDate2 = ((DateTime)startDate).AddDays(1); Expression <Func <LockPers_, bool> > where = PredicateBuilder.WhereStart <LockPers_>(); where = where.And(w => SM.In(w.EditCount, arrEditCount)); where = where.And(w => w.InsertTime >= startDate && w.InsertTime < endDate || w.InsertTime >= startDate2 && w.InsertTime < endDate2); where = where.And(w => w.IsDel == false); //where = where.Or(w => ()); //3 or里面括号问题 //int? i1 = 1; //int? i2 = 2; //int? i3 = 3; //Expression<Func<LockPers_, bool>> where = PredicateBuilder.WhereStart<LockPers_>(); //where = where.And( ww => ww.EditCount == i1); //where = where.And(ww => ww.EditCount == i2); //where = where.Or(ww => (ww.EditCount == i3 && ww.IsDel == true)); StringBuilder sql = null; DynamicParameters spars = null; AnalysisExpression.VisitExpression(where, ref sql, ref spars); Console.WriteLine(sql); foreach (var name in spars.ParameterNames) { Console.WriteLine(name); WriteJson(spars.Get <object>(name)); } }
public void 括号优先级() { // 1 Expression <Func <LockPers, bool> > expression = w => (w.Id == "1" && (w.Name == "2" || w.Prompt == "3") && w.Content == "4" || w.Id == "5") && (w.IsDel != false && (w.IsDel == false || w.IsDel == true)); StringBuilder sql = null; DynamicParameters spars = null; AnalysisExpression.VisitExpression(expression, ref sql, ref spars); Console.WriteLine(sql); var example = "( w.Id == '1' && (w.Name == '2' || w.Prompt == '3') && w.Content == '4' || w.Id == '5') && w.IsDel != '0'"; Console.WriteLine(example); //// 2 //sql = null; //spars = null; //expression = w => // ( (w.Id == "1" || w.Name == "2" ) && (w.Prompt == "3" || w.Content == "4" ) || w.Id == "5") // && w.IsDel != "0"; //AnalysisExpression.VisitExpression(expression, ref sql, ref spars); //Console.WriteLine(sql); //// 3 //sql = null; //spars = null; //expression = w => // w.IsDel != "0" && w.Id == "1" || w.Name == "2" || w.Prompt == "3" || w.Content == "4" || w.Id == "5"; //AnalysisExpression.VisitExpression(expression, ref sql, ref spars); //Console.WriteLine(sql); //// 4 //sql = null; //spars = null; //expression = w => // w.IsDel != "0" && w.Id == "1" && w.Name == "2" && (w.Prompt == "3" || w.Id == "5") && w.Content == "4"; //AnalysisExpression.VisitExpression(expression, ref sql, ref spars); //Console.WriteLine(sql); foreach (var name in spars.ParameterNames) { Console.WriteLine(name); WriteJson(spars.Get <object>(name)); } }
public void In测试1() { // 1 in 表达式内创建数组(少量) 会直接转成sql 不走参数化 Expression <Func <LockPers, bool> > expression = t => SM.In(t.Name, new string[] { "马", "码" }) && t.Name == "农码一生" && t.Prompt == "男" || t.Name.Contains("11"); StringBuilder sql = null; DynamicParameters spars = null; AnalysisExpression.VisitExpression(expression, ref sql, ref spars); Console.WriteLine(sql); var example = " Name in ('马','码') and Name = @Name0 and Prompt = @Prompt1 or Name like @Name2 "; Console.WriteLine(example); var sqlstr = " Name in ('马','码') && Name == '农码一生' && Prompt == '男' || Name like '11' "; Console.WriteLine(sqlstr); }
public void 括号测试2() { Expression <Func <LockPers, bool> > expression = w => w.Id == "1" && w.Name == "2" || (w.IsDel != false && w.IsDel == true); StringBuilder sql = null; DynamicParameters spars = null; AnalysisExpression.VisitExpression(expression, ref sql, ref spars); Console.WriteLine(sql); var example = " w.Id == '1' && w.Name == '2' || (w.IsDel != false && w.IsDel == true) "; Console.WriteLine(example); foreach (var name in spars.ParameterNames) { Console.WriteLine(name); WriteJson(spars.Get <object>(name)); } }
public void 联表sql生成() { var Name = "测试bool修改2"; //var Content = "测试bool修改2"; //var arrEditCount = new int[5] { 22, 2, 3, 5, 1 }; // DateTime?startDate = new DateTime(2018, 10, 17); DateTime?endDate = ((DateTime)startDate).AddDays(1); var IsDel = false; var uName = "cc"; //w,w2 作为表别名 Dictionary <string, string> tabalis = new Dictionary <string, string>(); tabalis.Add(typeof(LockPers).FullName, "w"); tabalis.Add(typeof(Users).FullName, "w2"); //时间类型现在获取不到 Expression <Func <LockPers, Users, bool> > expression = (w, w2) => w.Name == Name && w.InsertTime >= startDate && w.InsertTime < endDate //&& w.InsertTime > // SM.DateStr(InserTime) //&& SM.In(w.EditCount, arrEditCount) && w.IsDel == IsDel && w2.UserName == uName ; StringBuilder sql = null; DynamicParameters spars = null; AnalysisExpression.JoinExpression(expression, tabalis, ref sql, ref spars); Console.WriteLine(sql); // expression = w => w.Content == Content; foreach (var name in spars.ParameterNames) { Console.WriteLine(name); WriteJson(spars.Get <object>(name)); } Console.WriteLine("++_+++++++"); }
public void 添加数据复杂语句测试lt() { string colm1 = "remake", val1 = " (select 666) "; System.Linq.Expressions.Expression <Func <LockPers, bool[]> > fiesExps = p => new bool[] { p.Content == "aa", p.IsDel == true, SM.Sql(colm1, val1), SM.Sql(p.Name, " (select 1) ") }; // System.Linq.Expressions.LambdaExpression colmvalambda = fiesExps as System.Linq.Expressions.LambdaExpression; System.Linq.Expressions.NewArrayExpression arryexps = colmvalambda.Body as System.Linq.Expressions.NewArrayExpression; StringBuilder sb = new StringBuilder(); Dapper.DynamicParameters spars = new Dapper.DynamicParameters(); int num = 1; string exgl = "="; sb.Append(" ( "); List <string[]> customColmval = new List <string[]>(); var lmbdParmName = colmvalambda.Parameters[0].Name; foreach (var p in arryexps.Expressions) { if (p.NodeType == System.Linq.Expressions.ExpressionType.Equal) { AnalysisExpression.BinaryExprssRowSqlParms(p, sb, spars, num++, exgl, (name, parmasName, exglstr) => string.Format("{0},", name)); //" {0} {2} @{0}{1} " } else if (p.NodeType == System.Linq.Expressions.ExpressionType.Call) { string[] arrColmval = new string[2]; // 0 column 1 value System.Linq.Expressions.MethodCallExpression method = p as System.Linq.Expressions.MethodCallExpression; int i = 0; tempstart: //meb = method.Arguments[0] as System.Linq.Expressions.MemberExpression; if (method.Arguments[i] is System.Linq.Expressions.ConstantExpression) { // 参数名/插入值 直接赋值 arrColmval[i] = (method.Arguments[i] as System.Linq.Expressions.ConstantExpression).Value.ToString(); } else if (method.Arguments[i] is System.Linq.Expressions.MemberExpression) {// 参数名/插入值 传入的时 变量 var meb = method.Arguments[i] as System.Linq.Expressions.MemberExpression; if (meb.Expression is System.Linq.Expressions.ParameterExpression && (meb.Expression as System.Linq.Expressions.ParameterExpression).Name == lmbdParmName) { // lambda表达式的参数成员 表示字段参数名 只取成员名称不取值 arrColmval[i] = (method.Arguments[i] as System.Linq.Expressions.MemberExpression).Member.Name; } else {// 外部传入的变量 arrColmval[i] = AnalysisExpression.GetMemberValue(method.Arguments[i] as System.Linq.Expressions.MemberExpression).ToString(); } } //(method.Arguments[i] as System.Linq.Expressions.MemberExpression).Member.Name; else { throw new Exception(p.ToString() + " 插入语句未能解析"); } if (++i < 2) { goto tempstart; } customColmval.Add(arrColmval); } else { throw new Exception(p.ToString() + " 插入语句未能解析"); } } sb.Remove(sb.Length - 1, 1); // 拼接子查询插入的 参数名 sb.Append((spars.ParameterNames.Count() > 0 && customColmval.Count > 0 ? ", " : string.Empty) + string.Join(",", customColmval.Select(p => p[0]).ToList <string>())); sb.AppendFormat(") values ({0}{1}) " , string.Join(",", spars.ParameterNames.ToList <string>().Select(p => "@" + p).ToList <string>()) , (spars.ParameterNames.Count() > 0 && customColmval.Count > 0 ? ", " : string.Empty) + string.Join(",", customColmval.Select(p => p[1]).ToList <string>()) ); Console.WriteLine(sb); return; // ############################################################ }