按linq中的特殊枚举值排序

Ali*_*091 5 c# linq

我想根据下面的图片订购我的清单(第一个字段是int,第二个是Enum)

我希望记录"foo"值出现在输出的第一位

我怎样才能在c#和linq中做到这一点?

提前致谢

public enum myEnum{
    goo,
    foo,
    boo
}
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

Dmi*_*nko 10

对于任意枚举和排序顺序,例如

  public enum MyEnum {
    boo = -1,
    foo = 3, 
    goo = 154,    
  };
Run Code Online (Sandbox Code Playgroud)

我建议映射:

  // we want foo, boo, goo order
  internal static readonly Dictionary<MyEnum, int> enumOrder = 
    new  Dictionary<MyEnum, int>() {
      {MyEnum.foo, 1},
      {MyEnum.boo, 2},
      {MyEnum.goo, 3},
  };
Run Code Online (Sandbox Code Playgroud)

查询:

  var result = source
    .OrderBy(item => enumOrder[item.SecondField]) // map second field on the desired order
    .ThenBy(item => item.FirstField);      
Run Code Online (Sandbox Code Playgroud)


jba*_*tac 5

一种更简单的方法是仅评估枚举并返回比较值:

 var result = list.OrderBy(item => item.myEnum == myEnum.foo ? 1 : 2)
                  .ThenBy(item => item.myEnum == myEnum.boo ? 1 : 2)
                  .ThenBy(item => item.myEnum == myEnum.goo ? 1 : 2); 
Run Code Online (Sandbox Code Playgroud)

这样您就不需要额外的变量和更具可读性的代码。

示例:https: //repl.it/repls/CornsilkGiganticDevelopers