Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Entity Framework sort by Enum value alphabetically

I have an entity called Comment, which has an enum property of type CommentType:

public class Comment
{
    public virtual Guid Id { get; private set; }
    public virtual CommentType CommentType { get; set; }
    // other prop removed for simplicity
}

public enum CommentType
{
    Comment,
    Correction,
    Improvement,
    BugFix,
    NewFeauture,
    Other 
}

I need to select the comments from database by the alphabetically value of the CommentType enum, something like

_db.Comments.OrderBy(p => p.CommentType)

However, the Enum values are treated as integers, and the sort will not work alphabetically correctly.

Is there any way to add some attributes / metadata to the Enum values to make them sort correctly alphabetically?

One solution will be to assign the integer value to enum values, but i already have many database records that will need to be updated. And this solution is not good for new added enum values.

public enum CommentType
{
    Comment = 2,
    Correction = 3,
    Improvement = 4,
    BugFix = 1,
    NewFeauture = 5,
    Other = 6 
}
like image 908
Catalin Avatar asked Aug 29 '26 19:08

Catalin


1 Answers

This idea of a table is nice of course, especially when the enum has many values and is likely to get new ones. However, when enum values are added both the code and the database need to be maintained. In general when the enum is volatile I would not use an enum but only the table. But when it is not likely to change much, you could also consider to stick with the enum simply write out the order instruction:

_db.Comments.OrderBy(p => 
    p.CommentType == CommentType.Comment ? "Comment" :
    p.CommentType == CommentType.Correction ? "Correction" :
    p.CommentType == CommentType.Improvement? "Improvement" :
    .... :
    "ZZZ")
like image 131
Joep Avatar answered Sep 01 '26 08:09

Joep