@gdoronは部分的に正しいです。あなたは2つのオプションがあります: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
Googleのこの 'session.CreateSqlQuery nhibernate' – gdoron
@Rippo。あなたは、クラスを表示せずにSQLクエリをNHibernateに変換する答えを得ることはできません。 – gdoron