我需要按状态==“已拒绝”和日期升序排序,然后按状态==“已接受”和日期降序排序。

我正在尝试以下操作,但不确定如何执行此操作:

items
   .OrderBy(x => x.status == "Rejected")
   .ThenBy(x => x.DateSubmitted)
   .ThenBy(x => x.status == "Accepted")
   .ThenByDescending(x => x.DateSubmitted)

最佳答案

您对任务的描述有点尴尬,(我认为)这会导致您实现一个稍微错误的实现。

我说:

items
   .Where(x => x.status == "Rejected")
   .OrderBy(x => x.DateSubmitted)
   .Concat(items.
       .Where(x => x.status == "Accepted")
       .OrderByDescending(x => x.DateSubmitted));


主要区别在于,现在不显示“已拒绝”或“已接受”以外的状态。
但是,我认为这正是您的意图。如果需要全套,请考虑使用

items
   .Where(x => x.status == "Rejected")
   .OrderBy(x => x.DateSubmitted)
   .Concat(items.
       .Where(x => x.status != "Rejected")
       .OrderByDescending(x => x.DateSubmitted));


PS。这也是假设Linq-To-Objects。我不太熟悉Linq-to-EF或Linq-to-SQL

关于c# - 使用Lambda对列表进行排序和子排序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7472014/

10-13 08:22