Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在子集合成员上具有条件的NHibernate查询只返回部分子集合_Nhibernate - Fatal编程技术网

在子集合成员上具有条件的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*间隔分钟”