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

Car*_*ond 6 nhibernate

Teacher和之间有亲子关系StudentReport.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>();
    }
Run Code Online (Sandbox Code Playgroud)

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

有没有什么方法可以热切地加载完整的子集合,或者省略在此查询中加载它并依赖于延迟加载它?

更新

这是解决方案:

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

mat*_*ieu 2

使用获取

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