HQL для объединения нескольких таблиц (ASP.NET MVC 2 с Fluent nHibernate) - PullRequest
1 голос
/ 26 мая 2011

У меня есть веб-приложение, написанное на asp.net mvc с беглым nhibernate.У меня есть 4 таблицы в иерархии.Который

Голосовать -> Опубликовать -> Категория -> Компания

Я пытаюсь создать запрос, в котором будут перечислены все сообщения компании, которые проголосовали за последние 3 дня.

Взять голоса компании:

IList<Vote> votes = session.CreateCriteria(typeof(Vote))
                            .CreateAlias("Post", "post")
                            .CreateAlias("Category", "category")
                            .Add(Restrictions.Eq("category.Company", pCompany))
                            .Add(Restrictions.Between("VoteDate", DateTime.Today.AddDays(-3), DateTime.Today))
                            .List<Vote>();

Принять сообщения выше голосов:

IList<Post> companyPosts= votes.Select(v=> v.Post).ToList();

Группировка сообщений по категориям:

List<IGrouping<int, Post>> groupbyTopic = 
                          (List<IGrouping<int, Post>>)
                          (from p in companyPosts group p by p.Topic.Id);


CreateCriteria gives error. 
NHibernate.QueryException: could not resolve property: Topic of: App.Models.Vote

Любое предложениеи хорошая рекомендация для эффективного запроса, в котором будут перечислены все сообщения компании, за которые проголосовали за последние 3 дня.

1 Ответ

1 голос
/ 29 июля 2011

Вы не указали псевдоним => .CreateAlias("post.Category", "category")

, альтернативно вы можете сделать запрос следующим образом:

IList<Vote> votes = session.CreateCriteria(typeof(Vote))
                        .Add(Restrictions.Between("VoteDate", DateTime.Today.AddDays(-3), DateTime.Today))
                        .CreateCriteria("Post")
                        .CreateCriteria("Category")
                        .Add(Restrictions.Eq("Company", pCompany))
                        .List<Vote>();
...