Вы можете использовать пользовательский компаратор (но я думаю, что использование enum намного лучше).
Также вы не можете использовать этот компаратор, если ваш OrderBy
должен быть переведен в SQL-запрос.
Пример:
public class TicketStatusComparer : IComparer<string>
{
private int GetIntValue( string value )
{
switch ( value )
{
case "Attended":
return 1;
case "Issue":
return 2;
case "Unpaid":
return 3;
}
return 0;
}
public int Compare( string x, string y )
{
return GetIntValue( x ) - GetIntValue( y );
}
}
, а затем используйте его так:
var list = new[]
{
new { A = 1, TicketStatus = "Issue" },
new { A = 2, TicketStatus = "Attended" },
new { A = 3, TicketStatus = "Unpaid" },
new { A = 4, TicketStatus = "Attended" },
new { A = 5, TicketStatus = "Unpaid" },
};
var xxx = list.OrderBy( x => x.TicketStatus, new TicketStatusComparer() ).ToList();