Beispiel #1
0
 /// <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;
 }
Beispiel #2
0
        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);
        }
Beispiel #3
0
        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 _);
        }
Beispiel #4
0
 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");
     }
 }
Beispiel #5
0
 private void Join <T>(DbSet <T> dbSet, DbJoinKind kind, IReadOnlyList <ColumnMapping> relationship, out T _)
     where T : class, IEntity, new()
 {
     _ = (T)Join(dbSet._, kind, relationship);
 }