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

并且明显抛出了一个没有被使用的sql异常group by

4

2 回答 2

0

生成的 sql 看起来确实是连线的,我已经将它翻译成 lambda 样式。尝试一下。如果你没有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 回答
0

看起来这是 NHContrib LINQ 提供程序的一些奇怪问题。我升级到 nHibernate 的第 3 版,新的 LINQ 提供程序似乎对相同的查询运行良好。

于 2010-01-12T16:44:49.237 回答