HQL查询错误子集合的计数(在元素错误中)

时间:2011-10-11 15:23:07

标签: nhibernate hql distinct

首先,请原谅我,我的词汇量对NHibernate有点限制,所以我可能会说错误的东西......这是我的问题:

我正在寻找的结果是一个不同学生的课程数量。我有三个班: 课程,学生,课程日期。 课程包含与CourseDates的HasMany关系。 CourseDates是每个类发生的日期的集合,包含与Students类的HasAndBelongsToMany关系。

我需要做的是从课程发生的所有日期开始统计学生。以下是我要复制的SQL语句的示例。结果是一个数字(长)。这个具体的例子产生了结果:5

SELECT COUNT(DISTINCT dbo.Literacy_Course_DatesStudents.IDStudent) AS StudentCount FROM Literacy_Course_DatesStudents INNER JOIN Literacy_Course_Dates ON Literacy_Course_DatesStudents.IDDate = Literacy_Course_Dates.IDDate WHERE (Literacy_Course_Dates.IDCourse = 28)

下面是我在专门为此报告创建的新类中编写的查询...但我一直收到错误:抛出了类型'Antlr.Runtime.MissingTokenException'的异常。通常我认为当我没有将CourseEnrolledCount类导入到其他类中时抛出了这个错误,但我已经这样做了。

Dim q As Castle.ActiveRecord.Queries.SimpleQuery(Of CourseEnrolledCount)
q = New Castle.ActiveRecord.Queries.SimpleQuery(Of CourseEnrolledCount)(GetType(Literacy.Courses.CourseDates), "select new CourseEnrolledCount(Count(Distinct o.IDStudent in elements(t.Students) as o)) from CourseDates t Where t.Course.IDCourse = :courseid")

如果我需要提供其他信息,请与我们联系。我希望我的问题清楚。提前感谢您的时间。

1 个答案:

答案 0 :(得分:0)

这是一个执行您想要的HQL查询:

select count(disctinct student.id) from Course course
inner join course.courseDates courseDate
inner join courseDate.students student
where course.id = :courseId

我会让你替换协会的真实姓名。

您甚至可以通过避免在课程上加入来缩短(并且更类似于您的SQL查询):

select count(disctinct student.id) from CourseDate courseDate
inner join courseDate.students student
where courseDate.course.id = :courseId