我有一个简单的测试对象模型,其中有学校,而学校有学生的集合。
我想检索一所学校及其所有超过一定年龄的学生。
我执行以下查询,获取给定学校和特定年龄以上的孩子:
public School GetSchoolAndStudentsWithDOBAbove(int schoolid, DateTime dob)
{
var school = this.Session.CreateCriteria(typeof(School))
.CreateAlias("Students", "students")
.Add(Expression.And(Expression.Eq("SchoolId", schoolid), Expression.Gt("students.DOB", dob)))
.UniqueResult<School>();
return school;
}
这一切都很好,我可以看到查询进入数据库并返回预期的行数。
但是,当我执行以下任一操作时,它会通过运行另一个查询为我提供给定学校的学生总数(无论前面的请求如何):
foreach (Student st in s.Students)
{
Console.WriteLine(st.FirstName);
}
Assert.AreEqual(s.Students.Count, 3);
谁能解释为什么?