Question 3:
Yes, you can. With HQL you can specify the fields you want to be returned, in which case they are returned in arrays, but you can also do something like this
Code:
select new ReportClass(c.Name, c.DateOfBirth) from Customer c (etc., etc.)
where "ReportClass" is a custom class with a constructor that matches the parameters in brackets. I had to use an import for the custom class to get this to work, but it works.
I don't think it is mentioned in the NHibernate docs, but it is in the Hibernate docs (with a lot more examples)
http://www.hibernate.org/hib_docs/v3/reference/en/html/queryhql.html
Sorry, no answers to Q1 & 2 :(