/// <summary> /// Initializes a new instance of <see cref="DbJoinClause"/> class. /// </summary> /// <param name="kind">The operation of SQL JOIN.</param> /// <param name="left">The left operand.</param> /// <param name="right">The right operand.</param> /// <param name="on">The SQL JOIN column mappings.</param> public DbJoinClause(DbJoinKind kind, DbFromClause left, DbFromClause right, IReadOnlyList <ColumnMapping> on) { Kind = kind; Left = left; Right = right; On = on; }
private IEntity Join(IEntity _, DbJoinKind kind, IReadOnlyList <ColumnMapping> relationship) { Debug.Assert(relationship[0].Target.ParentModel == _.Model); var result = MakeAlias(_); var resultFromClause = result.Model.FromClause; if (result != _) { resultFromClause = resultFromClause.Clone(result.Model); relationship = relationship.Select(x => new ColumnMapping(x.SourceExpression, result.Model.Columns[x.Target.Ordinal])).ToList(); } AddSourceModel(result.Model); FromClause = new DbJoinClause(kind, FromClause, resultFromClause, EliminateSubQuery(relationship)); return(result); }
private void Join <T, TKey>(DbSet <T> dbSet, TKey left, TKey right, DbJoinKind kind, out T _) where T : class, IEntity, new() where TKey : CandidateKey { dbSet.VerifyNotNull(nameof(dbSet)); left.VerifyNotNull(nameof(left)); if (!_sourceModels.Contains(left.ParentModel)) { throw new ArgumentException(DiagnosticMessages.DbQueryBuilder_Join_InvalidLeftKey, nameof(left)); } right.VerifyNotNull(nameof(right)); if (right.ParentModel != dbSet.Model) { throw new ArgumentException(DiagnosticMessages.DbQueryBuilder_Join_InvalidRightKey, nameof(right)); } Join(dbSet, kind, left.UnsafeJoin(right), out _); }
internal static string ToSql(this DbJoinKind kind) { if (kind == DbJoinKind.InnerJoin) { return("INNER JOIN"); } else if (kind == DbJoinKind.LeftJoin) { return("LEFT JOIN"); } else if (kind == DbJoinKind.CrossJoin) { return("CROSS JOIN"); } else { Debug.Assert(kind == DbJoinKind.RightJoin); return("RIGHT JOIN"); } }
private void Join <T>(DbSet <T> dbSet, DbJoinKind kind, IReadOnlyList <ColumnMapping> relationship, out T _) where T : class, IEntity, new() { _ = (T)Join(dbSet._, kind, relationship); }