0

我有一些 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);

有没有人有什么建议?

4

1 回答 1

1

是否有任何理由您无法在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。我当然会尝试更改为帖子本身跟踪它的方案。

于 2009-05-11T06:24:49.807 回答