问题描述
|
我在
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>();
解决方法
使用提取
return Session.QueryOver<Teacher>()
.Fetch(t => t.StudentReports)
.Where(r => r.FirstSaveTimestamp >= activityCutoff)
.TransformUsing(Transformers.DistinctRootEntity)
.List<Teacher>();