使用lambda表达式对列表进行排序和子排序

3

我需要按照状态==“Rejected”和日期升序,再按照状态==“Accepted”和日期降序排序列表。

我尝试使用以下代码,但不确定如何操作:

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

1
这是很多排序!这些数据来自数据库吗?如果是的话,最好在数据库中排序。 - Mike Ohlsen
还有其他的状态选项吗? - Tim B James
是的,还有其他的。其他的需要按日期排序。 - user895400
自定义OrderByWithDirection - Radik
1个回答

3
您描述的任务有些不太恰当,这导致您实现时略微出错。我建议:
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。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接