我正在建立一个学校管理应用程序,用于跟踪学生的迟到和缺勤情况。我有三个实体来帮助我。学生实体(名字,姓氏,身份证等); SystemAbsenceTypes实体,其SystemAbsenceTypeID值为Late,Absent-with-Reason,Absent-without-Reason;和一个名为StudentAbsences的交叉引用表(将学生ID与缺席类型ID,加上日期和Notes字段相匹配)。
我想要做的是查询给定学生的实体,然后在给定的日期范围内将每种缺勤的数量相加。我准备好我的currentStudent对象没有问题,然后我这样做......
Me.Data.LoadProperty(currentStudent,“StudentAbsences”)'加载交叉引用数据
lblDaysLate.Text =(来自ab in currentStudent.StudentAbsences where ab.SystemAbsenceTypes.SystemAbsenceTypeID = Common.enuStudentAbsenceTypes.Late).Count.ToString
...并且第二行失败,抱怨“对象引用未设置为对象的实例。”
我认为问题在于,虽然它看到(当然,也就是说)当前学生的四个缺席(即currentStudent.StudentAbsences.Count = 4) - 它还不能“同步”每一个没有人去看它的类型。实际上,四个StudentAbsence对象中的每一个都有一个名为SystemAbsenceType的属性,然后最终具有SystemAbsenceTypeID。
如何使用.Expand或.LoadProperty来实现这一目标?我是否需要盲目循环遍历所有这些集合,在我可以进行查询之前解除.LoadProperty所有内容?
还有其他技术吗?
答案 0 :(得分:4)
加载学生时,请尝试展开相关属性。
var currentStudent = context.Students.Expand("StudentAbsences")
.Expand("StudentAbsences/SystemAbsenceTypes")
.Where(....).First();