Есть ли причина, по которой вы не можете обновить поле в tblBoardPosts
всякий раз, когда к нему добавляется комментарий? Сохраните дату «оставленный или последний комментарий», тогда у вас будет намного более простой запрос и тот, который не должен сканировать каждый комментарий в системе, чтобы понять, что делать.
Сказав это, этот запрос может работать, если ваше поле DateModified
имеет значение NULL:
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);
Если это просто прямой столбец DateTime
, результат FirstOrDefault
по-прежнему будет DateTime
, который не обнуляется ... Вы можете попробовать:
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);
Это довольно отвратительно и может неправильно переводиться в SQL. Я, конечно, попытался бы перейти на схему, где само сообщение отслеживает это.