3

NHibernate の QueryOver 構文に変換しようとしている非常に単純なクエリがありますが、問題があります。元の SQL クエリは、機能的には次のものと同じです。

SELECT [Post].*, (
    SELECT Count(*)
    FROM [Comment]
    WHERE [Comment].[PostId] = [Post].[Id]) AS [CommentCount]
FROM [Post]

問題は、これを QueryOver 構文に変換するのが難しいことです。Post と CommandCount の両方を含む要約クラスを次のように定義してみました。

public class PostSummary
{
    public Post Post { get; set; }
    public CommentCount { get; set; }
}

次に、いくつかの選択でクエリを定義します。

Post lPostAlias = null;
Comment lCommentAlias = null;

var lCommentSubquery = QueryOver.Of(() => lCommentAlias)
    .Where(() => lCommentAlias.Post.Id == lPostAlias.Id)
    .ToRowCountQuery();

PostSummary lPostSummaryAlias = null;

session.QueryOver(() => lPostAlias)
    .SelectList(list => list
        .Select(x => x).WithAlias(() => lSummary.Post)
        .SelectSubQuery(lCommentSubQuery).WithAlias(() => lSummary.CommentCount)
    .List<PostSummary>();

次のエラー メッセージとともに例外がスローされます。

could not resolve property:  of: Project.Models.Post

.Select(x => x)そのため、クエリの一部が気に入らないようです。「Projections.RootEntity()」の行に沿って何かを見つけたいと思っていましたが、残念ながら私が見つけることができるものはありません。

誰かが私が間違っていることを説明し、この基本的なクエリを実行する適切な方法を教えてもらえますか? 必要な Post のすべてのプロパティを選択できると思いますが、遅延読み込みの目的で NHibernate が生成するプロキシ サブクラスを利用できなくなるのではないかと心配しています。

4

1 に答える 1