Skip to main content
 首页 » 编程设计

c#之在 C# 中,如何按对象的多个字段对对象集合进行排序

2024年02月05日33daizhj

我有一个项目对象列表,我想使用项目对象中的几个不同字段对集合进行排序。

IEnumerable<Project> list = GetProjectList(); 
 
public class Project 
{ 
      public DateTime? Date; 
      public string ImportanceLevel; 
}   

我首先要

  • 按日期字段排序(较早的日期应位于列表顶部,较远的日期应位于列表的顶部)并且这些日期应显示在任何没有日期的项目之前。
  • 对于没有设置日期的项目,我想按 ImportanceLevel(可以是 3 个字符串(低、中或高)之一,其中高优先,然后是中等,然后是低

我很欣赏如果这些是整数值会更好,但不幸的是它们现在存储为字符串)。

请您参考如下方法:

一个选项是

var sorted = list.OrderBy(l => l.Date.HasValue ? l.Date : DateTime.MaxValue) 
    .ThenBy(l => l.ImportanceLevel == "High" ? 1 :  
                    (l.ImportanceLevel == "Medium" ? 2 : 3)); 

在这里,它会做你想做的事,它还会按重要性对具有相同日期的项目进行排序。

或者,

var sorted2 = list.OrderBy(l => l.Date.HasValue ?  
                  int.Parse(l.Date.Value.ToString("yyyyMMdd")) : 
                  (l.ImportanceLevel == "High" ?  
                      100000001 : 
                      (l.ImportanceLevel == "Medium" ? 100000002 : 100000003))); 

其中,它不会按重要性对有日期的项目进行排序。