我在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>();
}
这将返回正确的教师列表,但每位教师的子集仅包含与选择条件匹配的报告。我希望每个匹配教师的报告集合包含所有报告,而不仅仅是符合标准的少数报告。
是否有某种方法可以急切地加载完整的子集合,或者在此查询中省略加载它并依赖于延迟加载它?
更新
这是解决方案:
return Session.QueryOver<Teacher>()
.Fetch(t => t.StudentReports).Eager
.JoinQueryOver<StudentReport>(t => t.StudentReports)
.Where(r => r.FirstSaveTimestamp >= activityCutoff)
.TransformUsing(Transformers.DistinctRootEntity)
.List<Teacher>();
答案 0 :(得分:2)
使用获取
return Session.QueryOver<Teacher>()
.Fetch(t => t.StudentReports)
.Where(r => r.FirstSaveTimestamp >= activityCutoff)
.TransformUsing(Transformers.DistinctRootEntity)
.List<Teacher>();