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?
davy.ai
Para modificar la consulta y obtener solo la última fila hija, puedes reemplazar el método
TakeLast(10)
conLast()
: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.