我想根据下面的图片订购我的清单 (第一个字段是int,第二个字段是Enum)
我想要记录“foo”值出现在输出的第一位
我怎么能在c#和linq中做到这一点?
提前致谢
public enum myEnum{
goo,
foo,
boo
}
答案 0 :(得分:8)
对于任意枚举和排序顺序,例如
public enum MyEnum {
boo = -1,
foo = 3,
goo = 154,
};
我建议映射:
// 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},
};
查询:
var result = source
.OrderBy(item => enumOrder[item.SecondField]) // map second field on the desired order
.ThenBy(item => item.FirstField);
答案 1 :(得分:3)
以下代码会按yourData
和NameOfYourEnumPropertyHere
两个属性对NameOfYourIntPropertyHere
进行排序。您需要替换您的房产名称,然后离开。
var sortedResult = yourData
.OrderBy(z => z.NameOfYourEnumPropertyHere)
.ThenBy(z => z.NameOfYourIntPropertyHere).ToList();
答案 2 :(得分:1)
一种更简单的方法是只评估枚举并返回比较值:
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);
这样,您将不需要额外的变量和更易读的代码。