@ gdoron частично правильно, у вас есть два варианта: а) использовать Session.CreateSqlQuery
или б) использовать именованный запрос, который IMO, вероятно, ваш лучший вариант.
В ваших сопоставлениях XML: -
<sql-query name="GetNameAndCount">
<![CDATA[
select
rs.Firstname, rs.Lastname, COUNT(rs.id) CountOf
from
(select firstname, lastname, (select name from users where userid = :id) as id
from person p) rs
group by rs.firstname, rs.lastname
]]>
</sql-query>
и получить данные
var results = Session
.GetNamedQuery("GetNameAndCount")
.SetInt32("id", id)
.SetResultTransformer(new AliasToBeanResultTransformer(typeof(NameCountDto)));
return results.List<NameCountDto>();
и ваш DTO будет выглядеть как
class NameCountDto {
public virtual string Firstname { get; set;}
public virtual string Lastname { get; set;}
public virtual int CountOf { get; set;}
}
Имейте в виду, что имена столбцов в вашем запросе и регистр имен свойств должны совпадать.
Скорее всего, вы также можете решить эту проблему, используя HQL, Criteria или QueryOver (я думаю *), но нам нужно будет увидеть ваш класс и сопоставления.