Я использую этот трюк для выполнения условного включения с EF. http://blogs.msdn.com/b/alexj/archive/2009/10/13/tip-37-how-to-do-a-conditional-include.aspx
Проблема, с которой я сталкиваюсь, заключается в том, что любые коллекции, в которых нет записей, являются нулевыми и не пустыми. Это вызывает головную боль, потому что я должен проверять каждую коллекцию, прежде чем смогу просмотреть ее в своем представлении mvc, иначе я получаю исключение с нулевой ссылкой.
Например, коллекция StudentModules будет нулевой. Как я могу превратить его в пустой список в моем запросе? т.е. без необходимости перебирать все это и проверять.
Я могу поместить конструктор в poco для инициализации списка, который это исправит, но эта коллекция является виртуальным членом в 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();