首页 > 解决方案 > 根据对象的枚举属性对列表进行排序

问题描述

我有一个实体类“汽车”,其中包含许多属性,包括枚举

public enum CarType 
{ BRANDNEW 
  ALMOSTNEW 
  OLD
} 

当我获得汽车对象列表时,我想订购列表,顶部是全新的汽车,然后是底部几乎是新车和旧车。我尝试用车名订购,效果很好

CarsList = new ObservableCollection<Car>(CarViewModel.OrderBy(item => item.Name))

但我想根据枚举类型对列表进行排序。

我尝试int为枚举类型添加值

public enum CarType 
{ BRANDNEW = 1
  ALMOSTNEW = 2
  OLD = 3
} 

CarsList = new ObservableCollection<Car>(CarViewModel.OrderBy(item => item.CarType))

但是没有用。

标签: c#xamarinxamarin.forms

解决方案


您的问题在其他地方,因为您的OrderBy, 似乎没有任何问题(从这个可验证的最小示例中可以看出)

public enum CarType
{
    BRANDNEW = 1,
    ALMOSTNEW = 2,
    OLD = 3
}

public static void Main(string[] args)
{
    var list = new List<CarType>{CarType.ALMOSTNEW, CarType.OLD, CarType.BRANDNEW};
    var asd = list.OrderBy(item => item);
    Console.WriteLine(string.Join("\n", asd));
}

输出

BRANDNEW
ALMOSTNEW
OLD

完整的演示在这里

问题的最可能原因是您没有使用查询结果重新分配或更新 UI。

CarsList = new ObservableCollection<Car>(CarViewModel.OrderBy(item => item.CarType))

You can prove the order by is working by the following, check the results by looking at your output window

    Debug.WriteLine(string.Join("\n", CarsList ));

推荐阅读