Exemplo n.º 1
0
        protected virtual void Join(TCriteria criteria)
        {
            IEnumerable <JoinClause> joinClauses =
                JoinClauseManager.Get(criteria, GetTableName(), GetAlias())
                .OrderBy(x => x.Order == 0 ? int.MaxValue : x.Order);

            foreach (var joinClause in joinClauses)
            {
                if (!string.IsNullOrWhiteSpace(joinClause.Splitter) && criteria.QueryType != QueryType.Sum)
                {
                    Builder.Select($"0 as {joinClause.Splitter}");
                }
                if (joinClause.HasJoin)
                {
                    var sb = new StringBuilder();
                    foreach (var joinSql in joinClause.JoinSqls)
                    {
                        sb.Clear();
                        sb.AppendLine();
                        switch (joinClause.JoinType)
                        {
                        case JoinType.Inner:
                            sb.AppendLine("INNER JOIN");
                            break;

                        case JoinType.Left:
                            sb.AppendLine("LEFT JOIN");
                            break;

                        case JoinType.Right:
                            sb.AppendLine("RIGHT JOIN");
                            break;

                        default:
                            throw new ArgumentOutOfRangeException();
                        }
                        sb.AppendLine(joinSql);
                        Builder.SimpleSql(sb.ToString());
                    }
                    if (criteria.QueryType == QueryType.Sum)
                    {
                        continue;
                    }
                    foreach (var selectSql in joinClause.SelectsSql)
                    {
                        Builder.Select(selectSql);
                    }
                }
                SplitOn.Add(joinClause.Splitter);
            }
        }
Exemplo n.º 2
0
 static QueryBuilder()
 {
     WhereClauseManager  = new WhereClauseManager(new WhereAttributeManager());
     JoinClauseManager   = new JoinClauseManager(new JoinClauseCreatorFactory());
     SelectClauseManager = new SelectClauseManager();
 }