Выберите родителя и количество детей в 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);