Ну, для начала, это одна сумасшедшая модель, но я предполагаю, что вы уже знаете это.
Вы действительно нуждаетесь в всей этой информации сразу?
Я сыграю адвоката дьявола здесь и предположу, что у вас есть, и в этом случае у вас есть несколько логических вариантов:
1) Как упомянуто @xandy - используйте .Include чтобы загрузить ваши ассоциации в один звонок.Предполагается, что вы настроили навигационные свойства для своих объектов в EDMX.
2) Используйте представление.Поместите всю эту сумасшедшую логику объединения в базу данных, сделав работу EF очень простым выбором в представлении.Недостатком этого является то, что ваши запросы к представлению в основном становятся только для чтения, так как я не верю, что вы можете выполнять обновления сущности, сопоставленной с представлением.
Так что это ваш выбор - если этотолько для сбора данных для отображения данных, используйте View, иначе загружайте ваши ассоциации одним нажатием.
Кроме того, будьте осторожны при написании ваших запросов LINQ - я вижу, что у вас есть несколько операторов .ToList, которые приведут кзапрос должен быть выполнен.
Создайте свой запрос, затем выполните .ToList один раз в конце.