@gdoron是部分正确的,你有两个选择,a)使用Session.CreateSqlQuery
或者b)使用一个命名的查询,其中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(我认为*)解决此问题,但我们需要查看您的类和映射。
@gdoron这有点不公平。这是一个完全有效的问题,我不会在Google上找到答案。 OP我已经给你一个+1来恢复平衡。 – Rippo 2012-02-15 09:03:55
所以google这个'session.CreateSqlQuery nhibernate' – gdoron 2012-02-15 09:06:02
@Rippo。你不能得到一个答案如何将SQL查询转换为NHibernate而不显示类。 – gdoron 2012-02-15 09:07:33