Это второй шаг вопроса, объясненного здесь: EF 4.1 code-first: Как загрузить связанные данные (parent-child-внучка)? .
Под руководством @ Slauma я успешно получил данные с помощью этого подхода:
var model = DbContext.SitePages
.Where(p => p.ParentId == null && p.Level == 1)
.OrderBy(p => p.Order) // ordering parent
.ToList();
foreach (var child in model) { // loading children
DbContext.Entry(child)
.Collection(t => t.Children)
.Query()
.OrderBy(t => t.Order) // ordering children
.Load();
foreach (var grand in child.Children) { // loading grandchildren
DbContext.Entry(grand)
.Collection(t => t.Children)
.Query()
.OrderBy(t => t.Order) // ordering grandchildren
.Load();
}
}
Хотя этот подход работает, он отправляет множество запросов в базу данных, и я ищу способ сделать все это одним запросом. Под руководством @ Slauma (поясняется в ответе по ссылке выше) я изменил запрос на этот:
var model2 = DbContext.SitePages
.Where(p => p.ParentId == null && p.Level == 1)
.OrderBy(p => p.Order)
.Include(p => p.Children // Children: how to order theme???
.Select(c => c.Children) // Grandchildren: how to order them???
).ToList();
Теперь, как я могу заказать детей (и внуков) при их выборе (как показано в первом примере кода выше)?