我正在尝试通过创建一个简单的博客应用程序来学习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异常。
答案 0 :(得分:0)
生成的sql确实看起来很奇怪,我把它翻译成lambda风格。 试试吧。如果你没有LinqPad去抓住它并查看它将会减轻你的生活。
答案 1 :(得分:0)
看起来这是NHContrib LINQ提供商的一些奇怪问题。我升级到nHibernate的第3版,新的LINQ提供程序似乎对同一个查询工作得非常好。