Это второй шаг вопроса, объясненного здесь: EF 4.1 code-first: Как загрузить связанные данные (родитель-ребенок-внук)?. Под руководством @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();
Теперь, как я могу упорядочить детей (и внуков) при выборе (как показано в первом примере кода выше)?