Вам необходимо указать трансформатор. Одним из вариантов является указание преобразователя EntityMap.
session.CreateQuery.SetTransformer(Transformers.AliasToEntityMap)
Это вернет список словарей, которые будут содержать пары имя-значение на основе вашего запроса. Кроме того, вы можете создать объект POCO, который сопоставляется с вашим запросом
public class MyProjection
{
public string SName { get; set; }
public string PName { get; set; }
public float Price { get; set; }
public string Aisle { get; set; }
public string Shelf { get; set; }
}
Затем укажите другой трансформатор
session.CreateQuery.SetTransformer(Transformers.AliasToBean<MyProjection>())
.List<MyProjection>();
Имейте в виду, что вам нужно указать псевдонимы для обоих подходов
select distinct s.Name as SName,p.Name as PName,p.Price as Price,
p.Location.Aisle as Aisle, p.Location.Shelf as Shelf...