2

私は以下のようなエンティティを持っています:

(1) コース (詳細あり) (2) 学生 (詳細あり) (3) StudentEnrollment (学生からコースへの 1 対多のマッピングを持つ)

現在、コースのフィールドがほとんどないプロジェクション クラス (CourseSummary と呼ばれる) と、そのコースの学生の総数 (TotalEnrments と呼ばれます) を作成しようとしています。以下のコードには、Campus of the courseも含めています(私の質問とは関係ありませんが)。

ここまでたどり着きました:

                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>();

しかし、どのように StudentEnrollment クラスに参加し、そこから関連するレコードの総数を取得すればよいでしょうか?

私はNHibernateの世界に慣れていないため、私の質問は非常に予備的なものになる可能性があります。

ありがとう

4

2 に答える 2

3
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<Student>()
               .Add(Restriction.Eq("Course.Id", "c.Id"))
               .SetProjections(Projections.RowCount()), "TotalStudents")
       )
       .SetResultTransformer(Transformers.AliasToBean<CourseSummary>())
       .List<CourseSummary>();
于 2013-01-23T05:29:17.413 に答える
1

Firoの答えを見て、自分で少し微調整した後、以下のように解決しました:

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>();
于 2013-01-24T23:36:42.157 に答える