¿Necesita ayuda para ordenar resultado LINQ
-
21-08-2019 - |
Pregunta
Tengo algo de código LINQ, que trabaja muy bien. Se recupera una lista de envíos en el foro ordenadas por la más reciente.
El problema aquí es el orden por ... en éste ordene por los comentarios más recientes. Así que si un foros acaba de recibir un comentario, entonces será hasta la parte superior de la lista (es decir. La más reciente).
kewl ... pero ¿qué pasa con los nuevos mensajes de mesa que acaba de ser creado? Se enumeran abajo de la parte inferior, ya que no tienen comentarios :( Es como si yo quiero decir " Para la mayoría de los comentarios recientes .. pero si u tiene ningún comentario, entonces es por su fecha de creación en los foros) ".
aquí está mi LINQ ...
boardPostList = (from bp in db.tblBoardPosts.Where(whereClause)
orderby (from bc in bp.tblBoardComments
orderby bc.DateModified descending
select bc.DateModified).First() descending
select bp).ToPagedList(pageNumber, numberOfResults);
¿Alguien tiene alguna sugerencia?
Solución
¿Hay alguna razón no se puede actualizar un campo en tblBoardPosts
cada vez que un comentario se ha publicado en ella? Mantener el "publicadas o último comentario" fecha, entonces tienes un más consulta más simple, y uno que no necesita escanear cada comentario en el sistema para resolver qué hacer.
Una vez dicho esto, esta consulta podría trabajo, si su DateModified
campo es anulable:
boardPostList = (from bp in db.tblBoardPosts.Where(whereClause)
orderby ((from bc in bp.tblBoardComments
orderby bc.DateModified descending
select bc.DateModified).FirstOrDefault() ?? bp.DateModified) descending
select bp).ToPagedList(pageNumber, numberOfResults);
Si es sólo un DateTime
la columna recta, el resultado de FirstOrDefault
sigue siendo un <=> que sería no anulable ... Usted podría intentar:
boardPostList = (from bp in db.tblBoardPosts.Where(whereClause)
let lastComment = bp.tblBoardComments
.OrderByDescending(bc => bc.DateModified)
.FirstOrDefault()
let lastModified = (lastComment == null
? bp.DateModified
: lastComment.DateModified)
orderby lastModified descending
select bp).ToPagedList(pageNumber, numberOfResults);
Es bastante horrible sin embargo, y no puede traducirse en SQL correctamente. Sin duda tratar de cambiar a un esquema en el que el mensaje en sí hace un seguimiento de la misma.