Критерии и прогнозы NHibernate

У меня есть такие объекты, как показано ниже:

(1) Курс (с деталями) (2) Студент (с деталями) (3) StudentEnrolment (с отображением студента на курс один ко многим)

Теперь я пытаюсь создать класс проекции (называемый CourseSummary), который имеет несколько полей курса вместе с общим количеством студентов в этом курсе (назовите его TotalEnrolments). В приведенном ниже коде я также включил кампус курса (хотя это не имеет отношения к моему вопросу).

Я дошел до сюда:

                var courseSummaries = session.CreateCriteria<Course>()
               .CreateAlias("Campus", "cmp")
               .SetProjection(Projections.ProjectionList()
                                  .Add(Projections.Property("CourseId"), "CourseId")
                                  .Add(Projections.Property("StartDate"), "StartDate")
                                  .Add(Projections.Property("EndDate"), "EndDate")
                                  .Add(Projections.Property("cmp.CampusId"), "CampusId")
                                 //What here for "TotalEnrolments"?
                                  ).SetResultTransformer(Transformers.AliasToBean<Course>())
               .List<Course>();

Но как мне присоединиться к классу StudentEnrolment и получить от него общее количество связанных записей?

Я новичок в мире NHibernate, поэтому мой вопрос может быть очень предварительным.

Спасибо


person Dharmesh    schedule 14.01.2013    source источник


Ответы (2)


Пройдя через ответ Фиро и немного подправив себя, я решил это, как показано ниже:

var courseSummaries = session.CreateCriteria<Course>("c")
   .CreateAlias("Campus", "cmp")
   .SetProjection(Projections.ProjectionList()
       .Add(Projections.Property("CourseId"), "CourseId")
       .Add(Projections.Property("StartDate"), "StartDate")
       .Add(Projections.Property("EndDate"), "EndDate")
       .Add(Projections.Property("cmp.CampusId"), "CampusId")
       .Add(Projections.Subquery(DetachedCriteria.For<StudentEnrolment>("s")
           .Add(Restriction.EqProperty("s.Course.CourseId", "c.CourseId"))
           .SetProjections(Projections.RowCount()), "TotalStudents")
   )
   .SetResultTransformer(Transformers.AliasToBean<CourseSummary>())
   .List<CourseSummary>();
person Dharmesh    schedule 24.01.2013

person    schedule
comment
Привет, Фиро, прежде всего, большое спасибо за ответ. Я был почти уверен, что мой вопрос никого не заинтересует. Однако я не понимаю .Add (Restriction.Eq (Course.Id, c.Id)). Разве мне вообще не нужна таблица StudentEnrolment? - person Dharmesh; 24.01.2013
comment
хм, прочитав еще раз, я думаю, что не понял структуру таблицы и классов. Можете ли вы опубликовать соответствующие части курса, студента и зачисления студента? Тогда я обновлю свой ответ - person Firo; 24.01.2013
comment
Еще раз спасибо, Фиро, мне удалось решить это из вашего предложения. - person Dharmesh; 25.01.2013