Hai bisogno di aiuto per ordinare un risultato Linq
-
21-08-2019 - |
Domanda
Non ho certo codice LINQ, che funziona bene. Si recupera un elenco dei posti da tavolo ordinati dal più recente.
La cattura è il ordine da ... it ordini da parte i più recenti commenti. Quindi, se un post scheda appena ricevuto un commento, allora sarà il cima alla lista (es. Più recente).
kewl ... ma per quanto riguarda nuovi post da tavolo che appena creato? Essi sono elencati in basso in fondo, perché non hanno commenti :( E 'come voglio dire " ordine dalla maggior parte dei commenti recenti .. ma se la u non commento, poi il suo dal tuo post bordo creare data) ".
ecco il mio 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);
Qualcuno ha qualche suggerimento?
Soluzione
C'è qualche motivo non è possibile aggiornare un campo in tblBoardPosts
ogni volta che un commento viene pubblicato ad esso? Mantenere il "pubblicato o ultimo commento" data, quindi hai un molto di query più semplici, e uno che non ha bisogno di eseguire la scansione di ogni commento nel sistema di capire cosa fare.
Detto questo, questa query potrebbe di lavoro, se il vostro DateModified
campo è nullable:
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 è solo un DateTime
colonna di dritta, il risultato di FirstOrDefault
è ancora una <=> che sarebbe non annullabile ... Si potrebbe provare:
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);
E 'abbastanza orribile, però, e non può tradursi in SQL correttamente. Io certamente provare a cambiare uno schema in cui la carica si mantiene traccia di esso.