我想根据下面的图片订购我的清单(第一个字段是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)
一种更简单的方法是仅评估枚举并返回比较值:
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