2011-08-12 5 views
2

以下の方法を理解するのが難しいです。指定されたListプロパティのトップ(x)エンティティをフェッチするためのNHibernateクエリ

public class Post 
{ 
    ... 
    public IList<Comment> Comments 
    ...  
} 

public class Comment 
{ 
    public DateTime CommentDate 
    ... Some other properties but no reference to Post... 
} 

がどのように私は日付の降順で注文した特定のポストのための唯一の最初の10件のコメントを取得するためにクエリを記述することができます

は、以下のクラスを考えると?

PostからCommentからの参照が存在しないので、私はCommentに照会することはできません、私はPostに照会する必要がありますが、私のすべてのクエリがPostを返すように見える、と投影で私の試みは失敗しています。

Postを参照するプロパティを追加することはできません。実際には私のドメインモデルではありません。したがって、私は立ち往生しています。

私は何かが明らかに欠けていないことを願っています。

編集:

これは

var query = (from comment in Session.Query<Comment>() orderby comment.CommentDate 
where comment.Post == some Post select comment).Take(10); 

を投稿するコメントからの参照があったが、そこではない場合、私が欲しいものを私に与えてしまうので、私は上の同等のクエリを探しています10のコメントのリストを返す投稿。

Linq経由でクエリを実行できるのであれば、それは私が望むものですが、QueryOverを使用すれば十分です。

代わりに、私のドメインモデルの代わりにその参照が存在する可能性があります。

+0

苦労しているコードを投稿すると、質問に答える方法がわかります(例:HQL、Criteria、QueryOverなど)。 – csano

答えて

0

ここでHQLを使用してソリューションです:

var postId = 1; 
var hql = "select p.Comments from Post p join p.Comments c where p.PostId = :postId order by c.CommentDate desc"; 
var result = session.CreateQuery(hql) 
    .SetParameter("postId", postId) 
    .SetMaxResults(10) 
    .List<Comment>(); 

私はクライテリアAPIでそれを行う方法を見つけ出すことができませんでした。

+0

ありがとう、それは動作します。最後に、ドメインモデルを変更してクエリを簡単にしました。 – StanK

関連する問題