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 が生成するプロキシ サブクラスを利用できなくなるのではないかと心配しています。