WCF数据服务 - .Expand或.LoadProperty似乎都没有我需要的东西

时间:2010-04-12 22:11:11

标签: linq wcf-data-services

我正在建立一个学校管理应用程序,用于跟踪学生的迟到和缺勤情况。我有三个实体来帮助我。学生实体(名字,姓氏,身份证等); 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所有内容?

还有其他技术吗?

1 个答案:

答案 0 :(得分:4)

加载学生时,请尝试展开相关属性。

var currentStudent = context.Students.Expand("StudentAbsences")
                                     .Expand("StudentAbsences/SystemAbsenceTypes")
                                     .Where(....).First();