我有一个实体列表,它有一个枚举。
public class Car
{
public int CarId { get; set; }
public string CarName { get; set; }
public CarCategory CarCategory { get; set; }
}
public enum CarCategory
{
None = 0,
kLowRange = 1,
kMidRange = 2,
kHighRange = 3
}
现在我有一个汽车列表,我想使用Comparer并在枚举上运行它,以便所有具有CarCategory为kMidRange和kHighRange的实体将被排序到列表中的第一个。
我尝试了answer,但没有找到任何运气。
感谢。
更新 我有点犯了我正在做的错误。我在看
var sortedList = carList
.OrderBy(x => x.CarCategory,
new EnumComparer<CarCategory> {
CarCategory.kMidRange,
CarCategory.kHighRange});
但是只获得相同的价值观。我必须添加.ToList()才能获得结果。
var sortedList = carList
.OrderBy(x => x.CarCategory,
new EnumComparer<CarCategory> {
CarCategory.kMidRange,
CarCategory.kHighRange})
.ToList();
会给我预期的结果。我的错!
答案 0 :(得分:11)
enum
有效整数(int
)
枚举的已批准类型是byte,sbyte,short,ushort,int, uint,long或ulong。
有关详细信息,请参阅https://msdn.microsoft.com/en-us/library/sbbt4032.aspx。
由于CarCategory
实施具有所需订单中的项目,您只需
var sortedList = carList
.OrderByDescending(x => (int) (x.CarCategory))
.ToList();
请注意Descending
:您希望kHighRange
位于顶部。如果您想要任意订单,例如
kMidRange, kHighRange, None, kLowRange
我建议使用映射:
// desired order: None should be 3d, LowRange 4th, MidRange 1st, HighRange 2nd
int[] map = new[] {3, 4, 1, 2};
var sortedList = carList
.OrderBy(x => map[(int) (x.CarCategory)])
.ToList();