/// <summary>
        /// Creates a <see cref="DbJoinExpression"/> between the current 'FROM' clause and the expression returned by the <paramref name="target"/> functor.
        /// </summary>
        /// <param name="joinExpressionType">Specifies the type of join expression.</param>
        /// <param name="query">The target <see cref="DbQuery{TQueryExpression}"/></param>
        /// <param name="target">The target join expression.</param>
        /// <param name="condition">A <see cref="DbExpression"/> that specifies the join condition.</param>
        /// <returns><see cref="DbQuery{TQueryExpression}"/></returns>
        public static DbQuery <TQueryExpression> Join <TQueryExpression>(this DbQuery <TQueryExpression> query,
                                                                         DbJoinExpressionType joinExpressionType, DbExpression target,
                                                                         DbExpression condition) where TQueryExpression : DbQueryExpression, new()
        {
            var dbExpression = (DbExpression)DbExpressionFactory.MakeJoin(joinExpressionType, target, condition);

            if (!query.QueryExpression.FromExpression.IsNull())
            {
                dbExpression = DbExpressionFactory.Concat(query.QueryExpression.FromExpression, dbExpression);
            }
            query.QueryExpression.FromExpression = dbExpression;
            return(query);
        }