El orden de Entity Framework incluye

Estoy tratando de hacer algo como lo siguiente para trabajar:

_dbmsParentSections = FactoryTools.Factory.PdfSections .Include(x => x.Children.OrderBy(y => y.Order).ToList()) .Include(x => x.Hint).Include(x => x.Fields) .Where(x => x.FormId == FormId && x.Parent == null) .OrderBy(o => o.Order) .ToList(); 

La parte que causa la excepción es:

 .Include(x => x.Children.OrderBy(y => y.Order).ToList()) 

EDITAR:

Sobre la observación adicional,

 _dbmsParentSections.ForEach(x => x.Children = x.Children.OrderBy(y => y.Order).ToList()); 

hizo el trabajo por mí (después de la llamada de Factory inicial y sin Children.OrderBy ).

Parece que no puedes ordenar la colección de niños en tu consulta. Puede ordenar después de la consulta o cargar los elementos secundarios en una segunda consulta.

Preguntas y respuestas similares aquí

El método de extensión Include es una mera envoltura alrededor de DbQuery.Include . Internamente no ejecuta las expresiones, solo las analiza , es decir, toma sus expresiones miembro y las convierte en una ruta como cadena. La ruta se usa como entrada para DbQuery.Include .

Se ha solicitado anteriormente para mejorar la funcionalidad de Include , por ejemplo, para permitir colecciones parcialmente cargadas al incluir una cláusula Where . Ordenar puede ser otra solicitud de cambio. Pero como puede ver, debido al funcionamiento interno de Include todo el mecanismo tendrá que rediseñarse para implementar tales mejoras. No lo veo en el mapa de ruta actual , así que puede llevar un tiempo …

Esto nunca funcionará. EF include es tratar de entender y traducir todo a SQL, pero quieres mucho de esto. Cargue todas las entidades sin ordenar y .ToList () – ing, y escriba un método de extensión para IEnumerable para obtener un resultado ordenado.

En general, si está utilizando un grupo de inclusiones, es porque necesita acceder a las propiedades secundarias en una vista. Lo que hago es ordenar la colección hija cuando necesito acceder a ella en una vista.

Por ejemplo, podría comstackr algunas sentencias Incluir para un formulario maestro / detalle. No tiene sentido ordenar esto en la consulta inicial de EF. En cambio, ¿por qué no ordena estos registros secundarios a nivel de vista cuando los está accediendo realmente?

Es posible que tenga una encuesta con varias preguntas de la encuesta. Si deseo presentar las preguntas en un orden particular, hágalo en el nivel de vista parcial cuando paso la colección de elementos secundarios para niños a la vista parcial.

 @Html.Partial("_ResponsesPartial",Model.SurveyResponses.OrderBy(x => x.QuestionId)) 

No debe convertir un tipo IEnumerable a IEnumerable y llame a Include porque Include no es compatible con el tipo IEnumerable .

En resumen, nunca llame a Incluir después de ToList

 IQueryable = server side call (SQL) IEnumerable = client side (loaded in memory)