NHibernate标准和预测

NHibernate标准和预测,nhibernate,nhibernate-criteria,Nhibernate,Nhibernate Criteria,我的实体如下所示: var courseSummaries = session.CreateCriteria<Course>("c") .CreateAlias("Campus", "cmp") .SetProjection(Projections.ProjectionList() .Add(Projections.Property("CourseId"), "CourseId") .Add(Projections.Property("Star

我的实体如下所示:

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>();
(1) 课程(附详情) (2) 学生(附详情) (3) 学生学习(学生到课程的一对多映射)

现在我正在尝试创建一个投影类(称为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>();
var courseSummaries=session.CreateCriteria()
.CreateAlias(“校园”、“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”)
//“全部注册”是什么意思?
).SetResultTransformer(Transformers.AliasToBean())
.List();
但我该如何加入学生培训班并从中获得相关记录的总数呢

我是NHibernate世界的新手,因此我的问题可以是非常初步的

谢谢

var courseSummaries=session.CreateCriteria(“c”)
.CreateAlias(“校园”、“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())
.Add(Restriction.Eq(“课程Id”、“c.Id”))
.SetProjections(Projections.RowCount()),“TotalStudents”)
)
.SetResultTransformer(Transformers.AliasToBean())
.List();
var courseSummaries=session.CreateCriteria(“c”)
.CreateAlias(“校园”、“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())
.Add(Restriction.Eq(“课程Id”、“c.Id”))
.SetProjections(Projections.RowCount()),“TotalStudents”)
)
.SetResultTransformer(Transformers.AliasToBean())
.List();

在阅读了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>();
var courseSummaries=session.CreateCriteria(“c”)
.CreateAlias(“校园”、“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(“s”)
.Add(限制设备属性(“s.Course.CourseId”、“c.CourseId”))
.SetProjections(Projections.RowCount()),“TotalStudents”)
)
.SetResultTransformer(Transformers.AliasToBean())
.List();

在阅读了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>();
var courseSummaries=session.CreateCriteria(“c”)
.CreateAlias(“校园”、“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(“s”)
.Add(限制设备属性(“s.Course.CourseId”、“c.CourseId”))
.SetProjections(Projections.RowCount()),“TotalStudents”)
)
.SetResultTransformer(Transformers.AliasToBean())
.List();

Hi Firo,首先,非常感谢你的回答。我几乎确信没有人会对我的问题感兴趣。但是,我不明白“.Add(Restriction.Eq(“Course.Id”,“c.Id”)).难道我根本不需要学生辅导表吗?嗯,再读一遍后,我想我不了解该表和班级结构。你能把班级课程、学生和学生辅导的相关部分张贴出来吗?我会更新我的答案的。再次感谢菲罗,我根据你的建议解决了这个问题。嗨,菲罗,首先,非常感谢你的建议你的回答。我几乎确信没有人会对我的问题感兴趣。但是,我不明白“.Add(Restriction.Eq(“Course.Id”,“c.Id”)).难道我根本不需要学生辅导表吗?嗯,再读一遍后,我想我还不了解该表和班级结构。你能把班级课程、学生和学生辅导的相关部分张贴出来吗?我会更新我的答案的。再次感谢Firo,我根据你的建议解决了这个问题。