public override string Translate(LambdaExpression expr)
        {
            var newExpr = expr.Body as NewExpression;

            if (newExpr != null)
            {
                foreach (var member in newExpr.Members)
                {
                    _mapContainer.SetAlias(member.Name);
                }
            }
            Visit(expr.Body);
            SqlBuilder.Append($" GROUP BY");
            foreach (var item in _mapContainer.MemberAliasMaps)
            {
                if (TranslatorDelegate.IsMultipleType())
                {
                    _groupByBuilder.Append($"`{TranslatorDelegate.GetTypeAlias(item.Member.DeclaringType)}`.");
                }
                _groupByBuilder.Append($"`{TranslatorDelegate.GetMemberMap(item.Member)}`,");
            }
            _groupByBuilder.Remove(SqlBuilder.Length - 1, 1);
            SqlBuilder.Append(_groupByBuilder);
            return(SqlBuilder.ToString());
        }
        public override string Translate(LambdaExpression expr)
        {
            var newExpr = expr.Body as NewExpression;

            if (newExpr != null)
            {
                foreach (var member in newExpr.Members)
                {
                    _mapContainer.SetAlias(member.Name);
                }
            }
            Visit(expr.Body);
            //判断是否为多表操作,如果是多表操作则设置
            bool multiple = expr.Parameters.Count > 0;

            TranslatorDelegate.SetMultipleType();
            foreach (var item in _mapContainer.MemberAliasMaps)
            {
                if (multiple)
                {
                    SqlBuilder.Append($"`{TranslatorDelegate.GetTypeAlias(item.Member.DeclaringType)}`.");
                }
                SqlBuilder.Append($"`{TranslatorDelegate.GetMemberMap(item.Member)}] AS [{item.Alias}`,");
            }
            SqlBuilder.Remove(SqlBuilder.Length - 1, 1);
            return(SqlBuilder.ToString());
        }
 public SqlServerPageTranslator(TranslatorDelegate translatorDelegate, ISectionParameter parameter,
                                string orderBySql, string querySql)
     : base(translatorDelegate)
 {
     _parameter  = (PageSectionParameter)parameter;
     _orderBySql = orderBySql;
     _querySql   = querySql;
 }
Ejemplo n.º 4
0
 protected override Expression VisitMember(MemberExpression node)
 {
     if (TranslatorDelegate.IsMultipleType())
     {
         SqlBuilder.Append($" `{TranslatorDelegate.GetTypeAlias(node.Member.DeclaringType)}`.");
     }
     SqlBuilder.Append($"`{TranslatorDelegate.GetMemberMap(node.Member)}`");
     return(base.VisitMember(node));
 }
Ejemplo n.º 5
0
 public override string Translate(LambdaExpression expr)
 {
     //判断该Where查询是否为第一次访问,如果是第一次访问,则设置访问
     if (TranslatorDelegate.IsFirstVisit(SectionType.Where))
     {
         SqlBuilder.Append($" WHERE");
         TranslatorDelegate.SetVisited(SectionType.Where);
     }
     Visit(expr.Body);
     return(SqlBuilder.ToString());
 }
        protected override Expression VisitMember(MemberExpression node)
        {
            var asc = _parameter.IsAsc ? "ASC" : "DESC";

            SqlBuilder.Append(TranslatorDelegate.IsFirstVisit(SectionType.OrderBy) ? $"," : $" ORDER BY");
            if (TranslatorDelegate.IsMultipleType())
            {
                SqlBuilder.Append($" [{TranslatorDelegate.GetTypeAlias(node.Member.DeclaringType)}].");
            }
            SqlBuilder.Append($"[{TranslatorDelegate.GetMemberMap(node.Member)}] {asc}");
            return(base.VisitMember(node));
        }
Ejemplo n.º 7
0
        protected override Expression VisitBinary(BinaryExpression node)
        {
            var join = " INNER JOIN";

            if (_parameter.JoinType == JoinType.LeftJoin)
            {
                @join = " LEFT JOIN";
            }
            else if (_parameter.JoinType == JoinType.RightJoin)
            {
                @join = " RIGHT JOIN";
            }
            string left = "", right = "";

            if (node.Left is MemberExpression)
            {
                var memberExprL = node.Left as MemberExpression;
                var typeAlias   = TranslatorDelegate.GetTypeAlias(memberExprL.Member.DeclaringType);
                SqlBuilder.Append(
                    $" [{TranslatorDelegate.GetTableName(memberExprL.Member.DeclaringType)}] {typeAlias}");
                left =
                    $" [{typeAlias}].[{TranslatorDelegate.GetMemberMap(memberExprL.Member)}]";
            }
            SqlBuilder.Append($"{join}");

            if (node.Right is MemberExpression)
            {
                var memberExprR = node.Right as MemberExpression;
                var typeAlias   = TranslatorDelegate.GetTypeAlias(memberExprR.Member.DeclaringType);
                SqlBuilder.Append(
                    $" [{TranslatorDelegate.GetTableName(memberExprR.Member.DeclaringType)}] {typeAlias}");
                right = $" [{typeAlias}].[{TranslatorDelegate.GetMemberMap(memberExprR.Member)}]";
            }
            if (node.NodeType != ExpressionType.Equal)
            {
                throw new ArgumentException("Join param invalid!");
            }

            SqlBuilder.Append($" ON{left} ={right}");
            return(node);
        }
Ejemplo n.º 8
0
 public SqlServerWhereTranslator(TranslatorDelegate translatorDelegate) : base(translatorDelegate)
 {
     _parameters = new DynamicParameters();
 }
Ejemplo n.º 9
0
 public SqlServerJoinTranslator(TranslatorDelegate translatorDelegate, ISectionParameter parameter)
     : base(translatorDelegate)
 {
     _parameter = (JoinSectionParameter)parameter;
 }
Ejemplo n.º 10
0
 public MySqlSelectTranslator(TranslatorDelegate translatorDelegate) : base(translatorDelegate)
 {
     _mapContainer = new MemberAliasMapContainer();
 }
Ejemplo n.º 11
0
 public MySqlTopTranslator(TranslatorDelegate translatorDelegate, ISectionParameter parameter)
     : base(translatorDelegate)
 {
     _parameter = (TopSectionParameter)parameter;
 }
Ejemplo n.º 12
0
 public MySqlPageTranslator(TranslatorDelegate translatorDelegate, ISectionParameter parameter, string querySql) : base(translatorDelegate)
 {
     _parameter = (PageSectionParameter)parameter;
     _querySql  = querySql;
 }
 public SqlServerOrderByTranslator(TranslatorDelegate translatorDelegate, ISectionParameter parameter)
     : base(translatorDelegate)
 {
     _parameter = (OrderBySectionParameter)parameter;
 }
 public MySqlGroupByTranslator(TranslatorDelegate translatorDelegate) : base(translatorDelegate)
 {
     _mapContainer   = new MemberAliasMapContainer();
     _groupByBuilder = new StringBuilder();
 }
Ejemplo n.º 15
0
 public MySqlHavingTranslator(TranslatorDelegate translatorDelegate) : base(translatorDelegate)
 {
 }
Ejemplo n.º 16
0
        protected override Expression VisitMethodCall(MethodCallExpression node)
        {
            if (node.Method.Name == "In" || node.Method.Name == "NotIn")
            {
                if (node.Arguments[0] is UnaryExpression)
                {
                    var unaryExpr  = node.Arguments[0] as UnaryExpression;
                    var memberExpr = unaryExpr.Operand as MemberExpression;
                    if (memberExpr != null)
                    {
                        if (TranslatorDelegate.IsMultipleType())
                        {
                            SqlBuilder.Append($" [{TranslatorDelegate.GetTypeAlias(memberExpr.Member.DeclaringType)}].");
                        }
                        SqlBuilder.Append($"[{TranslatorDelegate.GetMemberMap(memberExpr.Member)}]");
                    }
                }
                SqlBuilder.Append($" {node.Method.Name.ToUpper()}");
                if (node.Arguments[1] is NewArrayExpression)
                {
                    var newArrayExpr = node.Arguments[1] as NewArrayExpression;
                    SqlBuilder.Append($" (");
                    foreach (var expr in newArrayExpr.Expressions)
                    {
                        SqlBuilder.Append($"{((ConstantExpression) expr).Value},");
                    }
                    SqlBuilder.Remove(SqlBuilder.Length - 1, 1);
                    SqlBuilder.Append($")");
                }
                return(node);
            }
            if (node.Method.Name == "Like" || node.Method.Name == "LeftLike" || node.Method.Name == "RightLike")
            {
                if (node.Arguments[0] is MemberExpression)
                {
                    var memberExpr = node.Arguments[0] as MemberExpression;
                    if (TranslatorDelegate.IsMultipleType())
                    {
                        SqlBuilder.Append($" [{TranslatorDelegate.GetTypeAlias(memberExpr.Member.DeclaringType)}].");
                    }
                    SqlBuilder.Append($"[{TranslatorDelegate.GetMemberMap(memberExpr.Member)}]");
                    var paramName = GetParameterName();
                    SqlBuilder.Append($" LIKE {paramName}");
                    if (node.Arguments[1] is ConstantExpression)
                    {
                        var constantExpr = node.Arguments[1] as ConstantExpression;
                        switch (node.Method.Name)
                        {
                        case "Like":
                            _parameters.Add($"{paramName}", $"'%{constantExpr.Value}%'");
                            break;

                        case "LeftLike":
                            _parameters.Add($"{paramName}", $"'{constantExpr.Value}%'");
                            break;

                        case "RightLike":
                            _parameters.Add($"{paramName}", $"'%{constantExpr.Value}'");
                            break;
                        }
                    }
                }

                return(node);
            }

            return(base.VisitMethodCall(node));
        }
Ejemplo n.º 17
0
 public SqlServerHavingTranslator(TranslatorDelegate translatorDelegate) : base(translatorDelegate)
 {
 }