具有子集合成员条件的NHibernate查询仅返回部分子集合

时间:2011-05-31 20:23:21

标签: nhibernate

我在TeacherStudentReport之间有亲子关系。当教师完成报告时,每个StudentReport都有一个时间戳字段。我有一个查询,要查找在一定时间内完成一份或多份报告的所有教师:

    public IList<Teacher> FindRecentlyActiveTeachers(int intervalMinutes)
    {
        if (intervalMinutes <= 0)
            throw new ArgumentException("Interval must be a positive number of minutes");

        DateTime activityCutoff = DateTime.Now.AddMinutes(-1 * intervalMinutes);

        return Session.QueryOver<Teacher>()
            .Left.JoinQueryOver<StudentReport>(t => t.StudentReports)
            .Where(r => r.FirstSaveTimestamp >= activityCutoff)
            .TransformUsing(Transformers.DistinctRootEntity)
            .List<Teacher>();
    }

这将返回正确的教师列表,但每位教师的子集仅包含与选择条件匹配的报告。我希望每个匹配教师的报告集合包含所有报告,而不仅仅是符合标准的少数报告。

是否有某种方法可以急切地加载完整的子集合,或者在此查询中省略加载它并依赖于延迟加载它?

更新

这是解决方案:

        return Session.QueryOver<Teacher>()
            .Fetch(t => t.StudentReports).Eager
            .JoinQueryOver<StudentReport>(t => t.StudentReports)
            .Where(r => r.FirstSaveTimestamp >= activityCutoff)
            .TransformUsing(Transformers.DistinctRootEntity)
            .List<Teacher>();

1 个答案:

答案 0 :(得分:2)

使用获取

return Session.QueryOver<Teacher>()
    .Fetch(t => t.StudentReports)
    .Where(r => r.FirstSaveTimestamp >= activityCutoff)
    .TransformUsing(Transformers.DistinctRootEntity)
    .List<Teacher>();