private IEnumerable <JoinClause> Join(Aliaser aliaser, DeleteStatement statement, TableIdentifier table, string fullPath = null) { if (table == null || table.Entity == null) { yield break; } var super = table.Entity.GetBaseEntity(); while (super != null) { var clause = JoinClause.Create(table, fullPath, name => statement.From.TryGet(name, out var join) ? (JoinClause)join : null, entity => new TableIdentifier(entity, aliaser.Generate())); if (!statement.From.Contains(clause)) { statement.From.Add(clause); statement.Tables.Add((TableIdentifier)clause.Target); } super = super.GetBaseEntity(); yield return(clause); } }
/// <inheritdoc /> public JoinClause Join(Aliaser aliaser, ISource source, IDataEntity target, string fullPath = null) { var clause = JoinClause.Create(source, target, fullPath, name => this.From.TryGet(name, out var join) ? (JoinClause)join : null, entity => new TableIdentifier(entity, aliaser.Generate())); if (!this.From.Contains(clause)) { this.From.Add(clause); } return(clause); }
/// <inheritdoc /> public JoinClause Join(Aliaser aliaser, ISource source, IDataEntityComplexProperty complex, string fullPath = null) { var joins = JoinClause.Create(source, complex, fullPath, name => this.From.TryGet(name, out var join) ? (JoinClause)join : null, entity => new TableIdentifier(entity, aliaser.Generate())); JoinClause last = null; foreach (var join in joins) { if (!this.From.Contains(join)) { this.From.Add(join); } last = join; } //返回最后一个Join子句 return(last); }