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?

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top