public void AddJoinByType <TTableLeft, TTableRight>(Expression <Func <TTableLeft, TTableRight, bool> > expression, JoinType joinType, string tableAlias = null)
        {
            var joinExpression        = LambdaResolverExtension.GetBinaryExpression(expression.Body);
            var leftMemberExpression  = _lambdaResolverExtension.GetMemberExpression(joinExpression.Left);
            var rightMemberExpression = _lambdaResolverExtension.GetMemberExpression(joinExpression.Right);
            var tableSchemaName       = SqlBuilderFluentHelper.GetSchema(typeof(TTableRight));
            var tableName             = SqlBuilderFluentHelper.GetTableName <TTableLeft>();
            var tableNameToJoin       = SqlBuilderFluentHelper.GetTableName <TTableRight>();
            var columnNameLeft        = SqlBuilderFluentHelper.GetColumnName(leftMemberExpression);
            var columnNameRight       = SqlBuilderFluentHelper.GetColumnName(rightMemberExpression);

            _sqlQueryBuilder.AddJoinByType(tableSchemaName, tableName, tableNameToJoin, columnNameLeft, columnNameRight, joinType, tableAlias);
        }