Brauchen Sie Hilfe, um eine Linq Ergebnis Bestellung
-
21-08-2019 - |
Frage
Ich habe einige Linq-Code, das funktioniert gut. Es ruft eine Liste der Board Beiträge der jüngsten geordnet.
Der Haken dabei ist, die um durch ... es Aufträge durch die jüngsten Kommentare. Also, wenn ein Forum erstellt einfach einen Kommentar bekommt, dann wird es oben in der Liste nach oben (dh. Jüngst).
kewl ... aber was ist mit neuen Board-Posts, die wurde gerade erstellt? Sie sind auf die unten aufgeführten, weil sie keine Kommentare :( Es ist wie ich „sagen will, , um durch die neuesten Kommentare an .. aber wenn u keinen Kommentar hat, dann wird sie von den Board Post erstellen Datum) “.
hier ist mein 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);
Hat jemand irgendwelche Vorschläge haben?
Lösung
Gibt es einen Grund, warum Sie kein Feld in tblBoardPosts
aktualisieren können, wenn ein Kommentar zu ihm geschrieben ist? Halten Sie die „gepostet oder letzter Kommentar“ date, dann haben Sie, eine viel einfachere Abfrage, und eine, die nicht braucht jeden Kommentar im System zu scannen, um herauszufinden, was zu tun ist.
Having said that, diese Abfrage Macht Arbeit, wenn Ihre DateModified
Feld NULL-Werte zugelassen:
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);
Wenn es nur eine gerade DateTime
Spalte, ist das Ergebnis der FirstOrDefault
noch ein DateTime
, die nicht-nullable sein würde ... Sie könnten versuchen:
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 ist ziemlich obwohl scheußlich, und kann in SQL nicht richtig übersetzen. Ich würde auf jeden Fall versuchen, ein System zu ändern, in dem die Post selbst Schiene von ihm hält.