在同一查询中使用Linq在Nhibernate中选择父项和子项数

时间:2009-12-31 18:02:01

标签: nhibernate linq-to-nhibernate

我正在尝试通过创建一个简单的博客应用程序来学习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异常。

2 个答案:

答案 0 :(得分:0)

生成的sql确实看起来很奇怪,我把它翻译成lambda风格。 试试吧。如果你没有LinqPad去抓住它并查看它将会减轻你的生活。

答案 1 :(得分:0)

看起来这是NHContrib LINQ提供商的一些奇怪问题。我升级到nHibernate的第3版,新的LINQ提供程序似乎对同一个查询工作得非常好。