Pergunta

Eu tenho algum código LINQ, que funciona bem. Ele recupera uma lista de postagens do conselho encomendadas pelo mais recente.

A captura aqui é o ordenar por ... Ordens dos comentários mais recentes. Portanto, se um post da placa recebesse um comentário, estará no topo da lista (ou seja, mais recente).

Kewl ... mas e as novas postagens do quadro que acabaram de ser criadas? Eles estão listados no fundo, porque não têm comentários :( é como se eu quisesse dizer "encomendar por comentários mais recentes .. mas se você não tiver comentários, então é a data da sua postagem de criação)".

Aqui está o meu 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);

Alguém tem alguma sugestão?

Foi útil?

Solução

Existe algum motivo para você não pode atualizar um campo em tblBoardPosts Sempre que um comentário é publicado? Mantenha a data "Postado ou último comentário", então você tem um Muito de Consulta mais simples e que não precisa digitalizar todos os comentários no sistema para descobrir o que fazer.

Dito isto, esta consulta poderia trabalho, se o seu DateModified O campo é anulado:

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);

Se for apenas um reto DateTime coluna, resultado de FirstOrDefault ainda é um DateTime O que seria não indicável ... você poderia tentar:

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);

É muito hediondo e pode não se traduzir em SQL corretamente. Eu certamente tentaria mudar para um esquema em que o próprio post acompanha.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top