Precisa de ajuda para encomendar um resultado LINQ
-
21-08-2019 - |
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?
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.