none
Entity Framework 如何实现多条件排序?先通过字段1,再通过字段2. RRS feed

  • 问题

  • 比如想实现 Aricles 排序,先通过 Creatime 再通过 UpdateTime 排序:

    db.Articles.OrderBy(a=>a.Creatime).OrderBy(a=>a.UpdateTime);

    这样写只会通过UpdateTime排序,我想实现 sql 里的多条件排序

    2011年12月24日 16:18

答案

  • 你好 db.Eysa,

    在sql中,你使用order by createtime,updatetime时,也是先按照createtime升序排列,再按照updatetime升序排列的,并不是并列关系,如果你想要实现这样的排序,可能需要做一些额外的处理。例如添加一个排序列,当创建这条记录时候,把createtime放入这个列,当有人回帖时候,用回帖时间更新这一列,最后按照这一列进行排序。


    Allen Li [MSFT]
    MSDN Community Support | Feedback to us
    2011年12月29日 3:50
    版主

全部回复

  • db.Articles.OrderBy(a=>a.Creatime).ThenBy(a=>a.UpdateTime);

    The following is signature, not part of post
    Please mark the post answered your question as the answer, and mark other helpful posts as helpful, so they will appear differently to other users who are visiting your thread for the same problem.
    Visual C++ MVP
    • 已标记为答案 Dun Eysa 2011年12月26日 9:31
    • 取消答案标记 Dun Eysa 2011年12月26日 13:55
    2011年12月25日 5:21
    版主
  • 你说得没错,我可能没表达清楚需求,是这样的:
    Aricles 是所有用户的文章,需要先按照发表时间排序,再按照更新时间排序。这里不是一先一后,而是同时作为排序条件。
    想实现 论坛帖子列表 这样的排序,新发表的在最上,如果有用户更新某一个帖子后,那么最新更新的这个就在最上。
    也就是说 Creatime 和 UpdateTime 哪个最早,哪个就是在最上。
     db.Articles.OrderBy(a=>a.Creatime).ThenBy(a=>a.UpdateTime);

    The following is signature, not part of post
    Please mark the post answered your question as the answer, and mark other helpful posts as helpful, so they will appear differently to other users who are visiting your thread for the same problem.
    Visual C++ MVP

    2011年12月26日 14:06
  • ……那你为什么要按照CreateTime排序?难道UpdateTime还会早于 CreateTime?

    The following is signature, not part of post
    Please mark the post answered your question as the answer, and mark other helpful posts as helpful, so they will appear differently to other users who are visiting your thread for the same problem.
    Visual C++ MVP
    2011年12月26日 16:05
    版主
  • ……那你为什么要按照CreateTime排序?难道UpdateTime还会早于 CreateTime?

    The following is signature, not part of post
    Please mark the post answered your question as the answer, and mark other helpful posts as helpful, so they will appear differently to other users who are visiting your thread for the same problem.
    Visual C++ MVP

    文章表。

    发表时间  最后回复时间

     

    怎么写能让 Creatime LastReplyTime 同时起作用?

    这两个字段,哪个最早哪个排在前面。

    2011年12月27日 10:59
  • 你好 db.Eysa,

    在sql中,你使用order by createtime,updatetime时,也是先按照createtime升序排列,再按照updatetime升序排列的,并不是并列关系,如果你想要实现这样的排序,可能需要做一些额外的处理。例如添加一个排序列,当创建这条记录时候,把createtime放入这个列,当有人回帖时候,用回帖时间更新这一列,最后按照这一列进行排序。


    Allen Li [MSFT]
    MSDN Community Support | Feedback to us
    2011年12月29日 3:50
    版主