You have to:
User user = null;
query.JoinAlias(p => p.User, () => user);
equivalent to
query.JoinAlias(p => p.User, () => user, JoinType.InnerJoin);
and then
projection = Projections.SqlFunction("UPPER",
NHibernateUtil.String,
Projections.Property(() => user.Email));
In NHibernate you always have to explicitly make the Joins
. There are no implicit joins.