2011-07-22 1 views
9

de Doublons possibles:
Sorting a list using Lambda/Linq to objects
C# List<> OrderBy Alphabetical Orderliste d'objets tri par propriété de chaîne C#

Comment puis-je aller sur le tri d'une liste d'objets dans l'ordre alphabétique par une propriété de chaîne.

J'ai essayé d'implémenter IComparable sur la propriété mais j'ai seulement compris comment trier le premier caractère (en utilisant char).

EDIT: Voici un exemple de code.

class MyObject { 
    public string MyProperty {get;set;} 
} 

List<MyObject> sampleList = new List<MyObject>();  

MyObject sample = new MyObject(); 
sample.MyProperty = "Aardvark"; 

MyObject sample2 = new MyObject(); 
sample2.MyProperty = "Zebra"; 

sampleList.Add(sample); 
sampleList.Add(sample2); 

sampleList.Sort(); // or something similar 

foreach (var item in sampleList) { 
    Console.WriteLine(item.MyProperty); 
} 

Doit afficher Aardvark et Zebra (par ordre alphabétique).

Merci!

+0

Linq to Objects – N0Alias

+0

Peut-être que cela aide http://stackoverflow.com/questions/722868/sorting-a-list-using-lambda-linq-to-objects – evilone

Répondre

8

Vous pouvez obtenir un tri IEnumerable<MyObject> comme ceci:

var sortedQuery = sampleList.OrderBy(x => x.MyProperty); 

Vous pouvez alors convertir la requête à une liste comme ceci:

var sortedList = sortedQuery.ToList(); 

Ou, vous pouvez simplement parcourir les articles:

foreach (var obj in sortedQuery) 
    Console.WriteLine(obj.MyProperty); 
3

En supposant que votre collection implémente l'interface IEnumerable, vous pouvez il suffit d'appeler la méthode OrderBy sur votre collection:

myCollection.OrderBy(c => c.Property); 
16

Vous pouvez le faire en utilisant délégué comparaison, en utilisant Sort(Comparision<T> comparision) surcharge.

list.Sort((a, b) => a.StringProperty.CompareTo(b.StringProperty)); 
1
var list = new List<SomeClass>(); 
// add some instances of SomeClass to list 
list.Sort((x, y) => x.SomeProperty.CompareTo(y.SomeProperty)); 
0

Assurez-vous d'inclure System.Collections.Generic et System.Linq.

List<myItemType> lst = new List<myItemType>(); 
    return lst.OrderBy(i => i.StringPropertyName); 
+0

Salut Jason - il renvoie une instance énumérable où l'énumération sera être commandé. Je suppose que vous pourriez faire lst = new List (lst.OrderBy (...)); – Brian

2

Convertir le code C#,

Si vous avez un objet de la liste ABC avec une propriété de chaîne S pour chaque objet dans la liste,

Dim MyList Comme une nouvelle liste (ABC)

Dim a = From i In Mylist _ 
      Order By i.S Ascending 

vous aurez le résultat dans un, mettre sur un itérateur.