0

簡単なブログ アプリケーションを作成して、MVC と nHibernate を学習しようとしています。

私は投稿テーブルとコメントテーブルを持っています。各投稿には複数のコメントを含めることができます。私の見解では、投稿の詳細とコメント数を表示する必要があります。

以下のコードを試しました

(from post in DbContext.Posts
where post.ScheduledDate <= DateTime.Now && post.Approved == true
orderby post.ScheduledDate descending
select new { Post = post, CommentCount = post.Comments.Count() }).Take(10);

これにより、以下の SQL が返されます。

SELECT top 10 count(comments1_.Id) as y0_ 
FROM Posts this_ 
left outer join Comments comments1_ 
         on this_.Id=comments1_.PostId 
WHERE (this_.ScheduledDate <= '2009-12-29' and this_.Approved = 1) 
ORDER BY this_.ScheduledDate desc

そして明らかにgroup by使用されていないSQL例外をスローします。

4

2 に答える 2

0

これは、NHContrib LINQ プロバイダーの奇妙な問題のようです。nHibernate のバージョン 3 にアップグレードすると、新しい LINQ プロバイダーは同じクエリに対して完全に機能しているようです。

于 2010-01-12T16:44:49.237 に答える
0

その生成された SQL は有線に見えますが、ラムダ スタイルに変換しました。それを試してみてください。LinqPadをお持ちでない場合は、手に取っ てチェックしてみてください。

  DbContext.Posts
    .Where(p=>p.ScheduledDate<=DateTime.Now && p.Approved)
    .OrderByDescending(p=>p.ScheduledDate)
    .Select(p=> new{ post= p,CommentCount = p.Comments.Count()})
    .Take(10);
于 2009-12-31T18:51:35.440 に答える