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?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top