我正在使用这个技巧来使用 EF 执行条件包含。http://blogs.msdn.com/b/alexj/archive/2009/10/13/tip-37-how-to-do-a-conditional-include.aspx
我遇到的问题是任何没有记录的集合都是空的,而不是空的。这引起了头疼,因为我必须先检查每个集合,然后才能在我的 mvc 视图中遍历它,否则我会得到一个空引用异常。
例如,StudentModules 集合将为空。如何在我的查询中将其变成一个空列表?即无需遍历所有内容并进行检查。
我可以在 poco 中放置一个构造函数来初始化列表,从而修复它,但是 this 集合是 poco 中的虚拟成员(基于 EF 视频!) - 这肯定不是要走的路吗?
var query = from module in db.Modules
where module.Id == id
select new
{
module,
QualificationModules = from qualificationModule in module.QualificationModules
where qualificationModule.IsDeleted == false
select new
{
qualificationModule,
qualificationModule.Qualification,
StudentModules = from studentModule in qualificationModule.StudentModules
where studentModule.IsDeleted == false
select new
{
studentModule,
studentModule.Student
}
},
Assessments = (from assessment in module.Assessments
where assessment.IsDeleted == false
select new
{
assessment,
assessment.AssessmentType
}
)
};
var modules = query.AsEnumerable().Select(x => x.module);
return modules.ToList().First();