在子集合成员上具有条件的NHibernate查询只返回部分子集合
我在在子集合成员上具有条件的NHibernate查询只返回部分子集合,nhibernate,Nhibernate,我在Teacher和StudentReport之间有亲子关系。每个StudentReport都有一个时间戳字段,记录教师完成报告的时间。我有一个查询,查找在一定时间内完成一份或多份报告的所有教师: public IList<Teacher> FindRecentlyActiveTeachers(int intervalMinutes) { if (intervalMinutes <= 0) throw new Argume
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>();
}
public IList FindRecentlyActivateCachers(int intervalMinutes)
{
国际单项体育联合会(t.StudentReports会议间隔分钟)
.其中(r=>r.FirstSaveTimestamp>=activityCutoff)
.变压器使用(变压器.距离)
.List();
}
这将返回正确的教师列表,但每个教师的子集合仅包含符合选择条件的报告。我希望每个匹配教师的报告集合包含所有报告,而不仅仅是满足标准的少数报告
有没有什么方法可以让我急切地加载完整的子集合,或者在这个查询中忽略加载它而依赖于延迟加载
更新
这就是解决方案:
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()
.Fetch(t=>t.StudentReports)
.JoinQueryOver(t=>t.StudentReports)
.其中(r=>r.FirstSaveTimestamp>=activityCutoff)
.变压器使用(变压器.距离)
.List();
使用Fetch
return Session.QueryOver<Teacher>()
.Fetch(t => t.StudentReports)
.Where(r => r.FirstSaveTimestamp >= activityCutoff)
.TransformUsing(Transformers.DistinctRootEntity)
.List<Teacher>();
return Session.QueryOver()
.Fetch(t=>t.StudentReports)
.其中(r=>r.FirstSaveTimestamp>=activityCutoff)
.变压器使用(变压器.距离)
.List();
就是这样!谢谢我还在学习QueryOver语法,看到这个例子,我想我可以清理一些其他的查询。只是一个与你的问题无关的随机提示。要否定你的intervalMinutes,你可以写“-intervalMinutes”,它会给你传递的正数的负值。而不必执行“-1*间隔分钟”