Search code examples
c#linqcollections

In C#, what is the best way to sort a list of objects by a string property and get correct order?


I have a list of "Issue" objects and i want to sort them by the "Priority" field.

The issue is that "Priority" is a string name like "HIGH", "MEDIUM" so i don't have an Id that i can sort by. How do I sort and tell the sorter that "HIGH" is higher than "MEDIUM" which is higher than "LOW" ?


Solution

  • The obvious way would be:

    string[] priorities = {  "LOW", "MEDIUM", "HIGH" };
    
    var orderedIssues = issues.OrderByDescending
                  (issue => Array.IndexOf(priorities, issue.Priority));
    

    But consider using an enumeration:

    public enum Priority
    {
        Low,
        Medium,
        High
    }
    
    var orderedIssues = issues.OrderByDescending
                  (issue => (Priority)Enum.Parse(typeof(Priority), issue.Priority, true));
    

    Even better would be using the enumeration type as the type of the property / field itself, in which case it's as simple (and less prone to error) as:

    var orderedIssues = issues.OrderByDescending(issue => issue.Priority);