代码之家  ›  专栏  ›  技术社区  ›  madaboutcode

在同一查询中使用LINQ选择父级和NHibernate中的子级计数

  •  0
  • madaboutcode  · 技术社区  · 15 年前

    我试图通过创建一个简单的博客应用程序来学习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 不使用。

    2 回复  |  直到 14 年前
        1
  •  0
  •   Alexander Taran    15 年前

    生成的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);
    
        2
  •  0
  •   madaboutcode    14 年前

    看起来这是NHcontrib Linq提供程序的一些奇怪问题。我升级到nhibernate的版本3,新的linq提供者在同一个查询中似乎工作得很好。