es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

La consulta de Linq falla si la consulta include tiene un limitador “takelast”.

Me gustaría usar esta consulta para obtener las últimas 10 filas hijas.

var list = await _context.Parent
                .Include(gs => gs.Child
                                    .OrderBy(gsm => gsm.Time)
                                    .TakeLast(10))
                .ToListAsync();

Después del bloque try catch, aparece el siguiente mensaje de error:

System.InvalidOperationException: La expresión ‘gs.GreenSpeedMess.AsQueryable().OrderByDescending(gsm => gsm.MesTime).TakeLast(10)’ no es válida dentro de una operación ‘Include’, ya que no representa un acceso a una propiedad: ‘t => t.MyProperty’. Para apuntar a navegaciones declaradas en tipos derivados, utilice castings (t => ((Derived)t).MyProperty) o el operador ‘as’ (t => (t as Derived).MyProperty). El acceso a la navegación de colecciones puede filtrarse componiendo operaciones Where, OrderBy(Descending), ThenBy(Descending), Skip o Take. Para obtener más información sobre cómo incluir datos relacionados, consulte http://go.microsoft.com/fwlink/?LinkID=746393.

¿Cómo debo configurar mi cadena de consulta para obtener solo la última fila hija?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para modificar la consulta y obtener solo la última fila hija, puedes reemplazar el método TakeLast(10) con Last():

    var list = await _context.Parent
                    .Include(gs => gs.Child
                                        .OrderBy(gsm => gsm.Time)
                                        .Last())
                    .ToListAsync();
    

    Esto ordenará las filas hijas por tiempo y solo obtendrá la última fila. Sin embargo, ten en cuenta que esto resultará en una única fila hija devuelta por cada fila padre.

Comments are closed.