public static void AssertSqlToken(Token statement, string expectedOutcome) { var actual = SqlServerVisitor.Compile(statement).Value; Assert.IsNotNull(actual); Assert.AreEqual(expectedOutcome, actual); }
private string ToBaseSql(QueryItem query, IAmlSqlWriterSettings settings) { using (var writer = new StringWriter()) { var visitor = new SqlServerVisitor(writer, settings); var clone = new CloneVisitor().WithPropertyMapper(p => { var table = p.Table; table.TryFillName(settings); if (string.IsNullOrEmpty(table.Type)) { return(IgnoreNode.Instance); } var props = settings.GetProperties(table.Type); if (props.Count < 1) { return(p); } if (!props.TryGetValue(p.Name, out var propDefn)) { return(IgnoreNode.Instance); } if (propDefn.DataType().Value == "foreign") { return(table.GetProperty(propDefn)); } return(p); }).Clone(query); visitor.Visit(clone); writer.Flush(); return(writer.ToString()); } }
private static void Main(string[] args) { //Expression<Func<User, int>> userLambda = (User u) => u.Age; var p = Expression.Parameter(typeof(User), "m"); var memberExpression = Expression.Property(p, "Name"); var expression = Expression.Lambda(memberExpression, p); Console.WriteLine(expression); //Func<int, int, int> calculate = (x, y) => { return x + y; };//计算x+y的lambda //Console.WriteLine(calculate(1, 2).ToString());//输出3 //Console.WriteLine(calculate(2, 5).ToString());//输出7 //ParameterExpression leftExpression = Expression.Parameter(typeof(int), "m");//int类型的,参数名称为m //ConstantExpression rightExpression = Expression.Constant(10, typeof(int));//常量表达式树,10 ////进行左边是否大于右边的判断 //var binaryExpression =Expression.GreaterThan(leftExpression, rightExpression); //Console.WriteLine(binaryExpression.ToString()); //var lambda =Expression.Lambda<Func<int,bool>>(binaryExpression, leftExpression).Compile();//构建成lambda表达式 //Console.WriteLine(lambda(5).ToString()); //ParameterExpression left1Expression= Expression.Parameter(typeof(int), "a");//int类型的,参数名称为a //ParameterExpression right1Expression = Expression.Parameter(typeof(int), "b");//int类型的,参数名称为b //var aAndbExpression = Expression.Add(left1Expression, right1Expression);//进行相加拼接 //ParameterExpression cExpression= Expression.Parameter(typeof(int), "c");//int类型的,参数名称为c //var finallyExpression = Expression.GreaterThan(aAndbExpression, cExpression); //Console.WriteLine(finallyExpression.ToString()); //var finallyLambda= Expression.Lambda<Func<int,int,int, bool>>(finallyExpression, left1Expression, right1Expression, cExpression).Compile();//构建成lambda表达式 //Console.WriteLine(finallyLambda(1, 6, 10).ToString()); int[] ages = new int[] { 1, 2, 5, 67 }; //Expression<Func<User, bool>> expression2 = m => (m.Age == 10 && m.Address.StartsWith("浙江") && m.Address.Contains("省") && m.Address.EndsWith("省")) || (m.Sex == 0 || "" == m.Address && ages.Contains(m.Age) && m.Age == ages[3]); //Expression<Func<User, bool>> expression2 = m => m.Address.TrimStart() == "11" && m.Name.TrimEnd() == "3434" && m.Age == 1 && m.IsDelete == true; Expression <Func <User, bool> > expression2 = m => GetAge() ? m.Address == "" : m.Age == 1; //Expression<Func<User, bool>> expression2 = m => m.Age == 10 && m.Age == 1 && m.Sex == GeneralType.Man && Convert.ToInt32("1") == 1; SqlServerVisitor sqlVisitor = new SqlServerVisitor("A."); var sqlMember = sqlVisitor.GetSqlWhere(expression2.Body); Console.WriteLine(sqlMember.Item1); if (sqlMember.Item2 != null) { foreach (var item in sqlMember.Item2) { Console.WriteLine($"{item?.ParameterName},{item?.Value}"); } } Console.Read(); }
public override Name GetTemporaryTableName(Name name = null) { return(SqlServerVisitor.GetTempTableName(name ?? Sql.Name(Guid.NewGuid().ToString("N")))); }