我有一些Linq代码,运行正常。它检索最近订购的董事会职位列表。
这里的捕获是订单 ...它按最近的COMMENTS命令。因此,如果董事会帖子刚收到评论,那么它将位于列表的顶部(即最近的)。
kewl ......但刚刚创建的新主板帖子呢?它们列在底部,因为它们没有评论:(这就像我想说“按最近的评论排序..但如果你没有评论,那么你的董事会帖子创建日期)”
这是我的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);
有人有任何建议吗?
答案 0 :(得分:0)
是否有任何理由在发布评论时无法更新tblBoardPosts
中的字段?保持“发布或最后评论”日期,然后您有一个多更简单的查询,并且不需要扫描系统中的每个评论以确定要做什么。
话虽如此,如果您的DateModified
字段可以为空,则此查询可能有效:
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。我当然会尝试改变一个帖子本身跟踪它的方案。