如何解决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>();
}
这将返回正确的教师列表,但是每个教师的子级集合仅包含符合选择标准的报告。我希望每位匹配的教师的报告集合都包含所有报告,而不仅仅是满足条件的报告。
有什么办法我可以急于加载完整的子集合,也可以忽略此查询中的加载而依靠延迟加载吗?
更新资料
这是解决方案:
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>();
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。