C# Trier la Liste par Enum
J'ai obtenu une liste d'Entité, qui a obtenu un enum.
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
}
Maintenant, j'ai une liste de Voitures, j'aimerais utiliser les Comparer et de les exécuter sur l'enum tels que toutes les entités ayant CarCategory comme kMidRange et kHighRange sera classé premier de la liste.
J'ai essayé avec la réponse mais n'a trouvé aucune chance.
Grâce.
Mise à JOUR:
J'ai un peu ont eu l'erreur que j'ai fais. Je regardais
var sortedList = carList
.OrderBy(x => x.CarCategory,
new EnumComparer<CarCategory> {
CarCategory.kMidRange,
CarCategory.kHighRange});
Mais a été que de mêmes valeurs. J'ai du ajouter .ToList() pour obtenir le résultat.
var sortedList = carList
.OrderBy(x => x.CarCategory,
new EnumComparer<CarCategory> {
CarCategory.kMidRange,
CarCategory.kHighRange})
.ToList();
Me donnera les résultats escomptés. Mon erreur!
Voulez-vous trier l'original
Il semble que
S'il vous plaît partager le utilisation & Mise de votre Comparer, et c'est infiniment plus facile de vous aider.
OrderByDescending, ou peut-être avec un peu plus de complexité si il veut vraiment la mi à venir avant haute, comme sa question, et ce genre de implique.
List<Car>
ou voulez-vous une séquence ordonnée comme cars.OrderByDescending(car => (int)car.CarCategory)
?Il semble que
var sorted = cars.OrderBy(c => c.CarCategory).ToList();
devrait être suffisant.S'il vous plaît partager le utilisation & Mise de votre Comparer, et c'est infiniment plus facile de vous aider.
var sortedCars = cars.OrderBy(c=>(int)c.Carcategory);
ou vous pouvez trouver une autre réponse de hereOrderByDescending, ou peut-être avec un peu plus de complexité si il veut vraiment la mi à venir avant haute, comme sa question, et ce genre de implique.
OriginalL'auteur Xander | 2017-03-02
Vous devez vous connecter pour publier un commentaire.
enum
est efficace entier (int
) dans votre cas,voir https://msdn.microsoft.com/en-us/library/sbbt4032.aspx pour plus de détails.
Depuis
CarCategory
la mise en œuvre a les éléments de la ordre souhaité vous pouvez mettre justes'il vous plaît, avis
Descending
: vous souhaitezkHighRange
pour être sur le haut. Si vous souhaitez un ordre arbitraire, par exempleJe suggère d'utiliser cartographie:
{2,3,0,1}
ou même{123, 45678, -14, 72}
... nous comparons les entiers (carte enum valeur entière correspondant à la valeur); tout ce que nous voulons estmap[2] < map[3] < map[0] < map[1]
Juste une remarque, cela ne fonctionne pas pour LINQ to entities, vous obtiendrez un "L'expression LINQ noeud de type 'ArrayIndex" n'est pas pris en charge dans LINQ" erreur
OriginalL'auteur Dmitry Bychenko