按特定项目对枚举类型列表的成员进行排序

时间:2012-10-10 13:17:05

标签: c# algorithm

我有enum

 public enum Fruits
    {
       Apple = 14,
       Lemon = 174,
       Grapes = 200,
       Peach = 1
    }

以及此enum的列表:

IEnumerable<Fruits> Fruits = new List<Fruits>();

默认情况下,当我在getValues上调用enum时,它会根据ID对这些条目进行排序。 我将列表显示为UI中的下拉列表,并希望按特定顺序对列表成员进行排序。在我的示例中,我希望Lemon成为列表中的第一项。

我试图通过Lemon条目订购这些项目:

Fruits.OrderBy(f => f.Lemon);

但在此上下文中我不允许这样做f.Lemon。也许我可以foreach列表删除Lemon项目,然后将其作为第一个条目插入。

我对编程很陌生,我发现了一些类似的问题但不是enum类型。

1 个答案:

答案 0 :(得分:4)

您可以使用OrderByDescending + ThenBy

fruits.OrderByDescending(f => f == Fruits.Lemon)
      .ThenBy(f => f);

请注意,变量的名称应与枚举类型不同(我使用的是小写fruits)。

如果您想通过名称订购第二个:

      .ThenBy(f => f.ToString());

f == Fruits.Lemon会返回您可以订购的bool。它类似于SQL CASE

ORDER BY CASE WHEN Fruit = 'Lemon' THEN 1 ELSE 0 END DESC, FRUIT ASC