Este es el segundo paso de una pregunta explicada here (EF 4.1 code-first: How to load related data (parent-child-grandchild)?). Por orientación de @Slauma pude recuperar datos. Mi primer código era la siguiente:EF 4.1 primer código: cómo ordenar las propiedades de navegación cuando se utilizan los métodos Incluir y/o Seleccionar?
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();
}
}
Funciona, pero, esto enviará muchas consultas en la base de datos y yo estaba buscando una manera de hacerlo todo en una sola consulta. Por @Slauma 's orientación (que se explica en el enlace anterior) cambio la consulta a éste:
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();
Ahora, ¿cómo puedo hacer un pedido hijos (y nietos) al seleccionarlos (como el primer código de arriba)?
Eche un vistazo a esta pregunta: http://stackoverflow.com/questions/4156949/ef4-linq-ordering-parent-and-all-child-collections-with-eager-loading-include. Lo que estás tratando de hacer se llama "carga ansiosa", y aparentemente, no puedes usar 'OrderBy' con' Include'. – devuxer
Sí, sé acerca de la carga ansiosa, y si miras el primer código (creado por el mío) verás que utilizo una declaración foreach en cada objeto en cada nivel (arriba para niño y niño para nieto) mismo como se explica en su enlace preparado. pero esto necesita más consultas en contra de la base de datos! Estoy buscando la forma de hacer esto en una sola consulta, ¡no más! –
¿Puede esperar cargar toda su estructura, y luego ordenar sus vistas cuando sean necesarias? No hay casi ninguna razón por la cual debería estar goteando lógica de presentación (ordenamiento) en su lógica de acceso a datos. –