-1

私はNHibernateの中に、以下のことを実現したい、私はNHibernateはラッパークエリ

select 
    rs.firstname, rs.lastname, COUNT(rs.id) 
from 
    (select firstname, lastname, (select name from users where userid = '12345') as id 
    from person p) rs 
group by rs.firstname, rs.lastname 

がどのように私はNHibernateの中でこれを達成することができ、このようなSQLクエリがありますか?任意のポインタが役立ちます。

+0

@gdoronこれはやや不公平です。これは完全に有効な質問です。この回答はGoogleでは見つけられません。 OP私はバランスを回復するためにあなたに+1を与えました。 – Rippo

+0

Googleのこの 'session.CreateSqlQuery nhibernate' – gdoron

+0

@Rippo。あなたは、クラスを表示せずにSQLクエリをNHibernateに変換する答えを得ることはできません。 – gdoron

答えて

2

@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(*と思う)を使って解決できる可能性がありますが、クラスとマッピングを確認する必要があります。

+0

こんにちはRippo、 返信ありがとうございますが、私のケースでは少し複雑です。私が私のクエリで言及したように、私は集計としてカウントを使用しましたが、それは単なるカウント以外の何かになる可能性があります。内側のクエリは、私の前の投稿に投稿されたものよりも複雑になります。これはレポート目的のためです。別のDTOを作成したくないので... HQLを使用する以外の方法がありますか? – TBone

+0

あなたは、文脈なしで質問に答えることはできません。しかし努力のために+1! – gdoron

+0

あなたは正しいです、あなたのサポートに感謝します。 :) – Rippo