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); } }
static QueryBuilder() { WhereClauseManager = new WhereClauseManager(new WhereAttributeManager()); JoinClauseManager = new JoinClauseManager(new JoinClauseCreatorFactory()); SelectClauseManager = new SelectClauseManager(); }