示例#1
0
        internal LinqExtender.Ast.Expression Visit(LinqExtender.Ast.Expression expression)
        {
            switch (expression.CodeType)
            {
            case CodeType.BlockExpression:
                return(VisitBlockExpression((LinqExtender.Ast.BlockExpression)expression));

            case CodeType.TypeExpression:
                return(VisitTypeExpression((LinqExtender.Ast.TypeExpression)expression));

            case CodeType.LambdaExpresion:
                return(VisitLambdaExpression((LinqExtender.Ast.LambdaExpression)expression));

            case CodeType.LogicalExpression:
                return(VisitLogicalExpression((LinqExtender.Ast.LogicalExpression)expression));

            case CodeType.BinaryExpression:
                return(VisitBinaryExpression((LinqExtender.Ast.BinaryExpression)expression));

            case CodeType.LiteralExpression:
                return(VisitLiteralExpression((LinqExtender.Ast.LiteralExpression)expression));

            case CodeType.MemberExpression:
                return(VisitMemberExpression((LinqExtender.Ast.MemberExpression)expression));

            case CodeType.OrderbyExpression:
                return(VisitOrderbyExpression((LinqExtender.Ast.OrderbyExpression)expression));

            case CodeType.MethodCallExpression:
                return(VisitMethodCallExpression((LinqExtender.Ast.MethodCallExpression)expression));
            }

            throw new ArgumentException("Expression type is not supported");
        }
示例#2
0
        public IEnumerable <T> Execute(LinqExtender.Ast.Expression expression, bool isToIdsQueryMethod, out string idsQuery)
        {
            notExpressions = (expression as LinqExtender.Ast.BlockExpression).Expressions.Where(e => e.CodeType == CodeType.NotExpression);
            this.Visit(expression);
            if (!string.IsNullOrWhiteSpace(this.selectBuilder.ToString()))
            {
                builder.Append(this.selectBuilder.ToString().TrimEnd(new char[] { ',' }));
            }
            else
            {
                builder.Append("* ");
            }

            string count = this.countBuilder.ToString();

            if (!string.IsNullOrWhiteSpace(count))
            {
                string newValue = this.builder.ToString().Replace(" * ", count);
                builder.Clear();
                builder.Append(newValue);
            }

            builder.Append(fromBuilder);

            if (!string.IsNullOrWhiteSpace(this.whereBuilder.ToString()))
            {
                string whereString = this.whereBuilder.ToString();
                if (whereString.StartsWith(" AND"))
                {
                    whereString = whereString.TrimStart(new char[] { ' ', 'A', 'N', 'D' });
                }

                builder.Append(" WHERE " + whereString);
            }

            if (!string.IsNullOrWhiteSpace(this.orderByBuilder.ToString()))
            {
                builder.Append(" ORDER BY " + this.orderByBuilder.ToString().TrimStart(new char[] { ',' }));
            }

            if (!string.IsNullOrWhiteSpace(this.endBuilder.ToString()))
            {
                builder.Append(this.endBuilder);
            }

            idsQuery = builder.ToString().Trim();

            return(new List <T>().AsEnumerable());
        }
示例#3
0
 public IEnumerable <T> Execute(LinqExtender.Ast.Expression exprssion)
 {
     throw new NotImplementedException();
 }
示例#4
0
 public IEnumerable <T> Execute(LinqExtender.Ast.Expression expression)
 {
     this.Visit(expression);
     return(new List <T>().AsEnumerable());
 }
示例#5
0
        public IEnumerable <T> Execute(LinqExtender.Ast.Expression expression, bool isToIdsQueryMethod, out string idsQuery)
        {
            this.queryBuilder.Clear();
            this.countBuilder.Clear();
            this.selectBuilder.Clear();
            this.orderByBuilder.Clear();
            this.whereBuilder.Clear();
            this.fromBuilder.Clear();
            this.pageBuilder.Clear();
            this.notExpressions = (expression as LinqExtender.Ast.BlockExpression).Expressions.Where(e => e.CodeType == CodeType.NotExpression);

            this.Visit(expression);
            if (!string.IsNullOrWhiteSpace(this.selectBuilder.ToString()))
            {
                this.queryBuilder.Append(this.selectBuilder.ToString().TrimEnd(new char[] { ',' }));
            }
            else
            {
                this.queryBuilder.Append("*");
            }

            string count = this.countBuilder.ToString();

            if (!string.IsNullOrWhiteSpace(count))
            {
                var queryValue = this.queryBuilder.ToString();
                var pattern    = @"(?<=^|\s)\*(?=\s|$)"; //find asterisk as whole word
                queryValue = System.Text.RegularExpressions.Regex.Replace(queryValue, pattern, count);
                this.queryBuilder.Clear();
                this.queryBuilder.Append(queryValue);
            }

            this.queryBuilder.Append(this.fromBuilder);

            if (!string.IsNullOrWhiteSpace(this.whereBuilder.ToString()))
            {
                string whereString = this.whereBuilder.ToString();
                if (whereString.StartsWith(" AND", StringComparison.OrdinalIgnoreCase))
                {
                    //whereString = whereString.TrimStart(new char[] { ' ', 'A', 'N', 'D' });
                    whereString = whereString.TrimStart().Remove(0, 3);
                }

                this.queryBuilder.Append(" WHERE " + whereString);
            }

            if (!string.IsNullOrWhiteSpace(this.orderByBuilder.ToString()))
            {
                this.queryBuilder.Append(" ORDER BY " + this.orderByBuilder.ToString().TrimStart(new char[] { ',' }));
            }

            if (!string.IsNullOrWhiteSpace(this.pageBuilder.ToString()))
            {
                this.queryBuilder.Append(this.pageBuilder);
            }

            string query = idsQuery = this.queryBuilder.ToString();

            if (isToIdsQueryMethod)
            {
                return(new List <T>());
            }

            return(this.ExecuteIdsQuery(query, this.operationType));
        }