Trier une liste par une propriété, puis par une autre
J'ai un exemple de classe contenant des données de deux points:
public enum Sort { First, Second, Third, Fourth }
public class MyClass
{
public MyClass(Sort sort, string name) {
this.Sort = sort;
this.Name = name;
}
public Sort Sort { get; set; }
public string Name { get; set; }
}
Je suis à la recherche pour les classer en groupes en fonction de leur Sort
biens, puis de les classer par ordre alphabétique de ces groupes.
List<MyClass> list = new List<MyClass>() {
new MyClass(MyClass.Sort.Third, "B"),
new MyClass(MyClass.Sort.First, "D"),
new MyClass(MyClass.Sort.First, "A"),
new MyClass(MyClass.Sort.Fourth, "C"),
new MyClass(MyClass.Sort.First, "AB"),
new MyClass(MyClass.Sort.Second, "Z"),
};
La sortie serait alors:
(montrant Name
)
A
AB
D
Z
B
C
J'ai été capable de le faire à l'aide d'un foreach
pour séparer les éléments dans de nombreux petits tableaux (regroupés par la valeur d'enum) mais cela semble très fastidieux - et je pense qu'il doit y avoir quelques LINQ solution que je ne connais pas.
source d'informationauteur caesay
Vous devez vous connecter pour publier un commentaire.
À l'aide de méthodes d'extension, d'abord
OrderBy
l'enum,ThenBy
nom.Côté de nice LINQ solutions, vous pouvez aussi le faire avec une méthode de comparaison comme vous l'avez mentionné. Faire
MyClass
mettre en œuvre lesIComparable
l'interface, avec uneCompareTo
méthode comme:La méthode ci-dessus permettra de commander vos objets d'abord par l'enum, et si l'enum valeurs sont égales, il compare le nom. Ensuite, il suffit d'appeler
list.Sort()
et il affiche le bon ordre.Cela devrait le faire, je pense que