Выберите родителя и количество детей в Nhibernate, используя Linq в одном запросе

Я пытаюсь изучить 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 ответа

Решение

Похоже, это была странная проблема с поставщиком NHContrib LINQ. Я обновляю nHibernate до версии 3, и новый поставщик LINQ, кажется, работает отлично для того же запроса.

Этот сгенерированный 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);
Другие вопросы по тегам