需要一些帮助来订购Linq结果

时间:2009-05-11 06:15:26

标签: linq sql-order-by

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

有人有任何建议吗?

1 个答案:

答案 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。我当然会尝试改变一个帖子本身跟踪它的方案。