我需要按状态==“已拒绝”和日期升序排序,然后按状态==“已接受”和日期降序排序。
我正在尝试以下操作,但不确定如何执行此操作:
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/