2010-02-16 8 views
0

J'ai une liste d'objets où l'objet a 2 attributs: id et name. Je dois commander la liste par le nom des objetsCommander la liste d'un objet

Comment est-ce que je peux faire ceci?

+2

Un peu plus d'informations sur l'objet serait utile. –

Répondre

1

Linq est surchargé pour cela lorsqu'il existe des méthodes intégrées pour cela.

Si vous voulez dire un tableau, il suffit d'utiliser Array.Sort:

Array.Sort(items, (x, y) => x.Name.CompareTo(y.Name)); 

Si vous voulez dire un List<T>, utilisez la il fonction Sort:

items.Sort((x, y) => x.Name.CompareTo(y.Name)); 
+0

+ 1 pour utiliser le support natif List pour le tri, plutôt que de sortir dans Linq (non pas qu'il y ait quelque chose qui ne va pas avec Linq, mais dans ce cas c'est exagéré IMHO, et ne donne pas plus de clarté) –

+1

Vrai à propos de l'utilisation du support intégré, mais comme quelqu'un d'autre a dit qu'il ne s'occupe pas des cas null ... Maintenant, vous pouvez changer ce qui précède pour prendre soin de ces cas, mais le code n'est plus si propre. alors c'est un choix entre un simple orderby et ce qui précède avec vérification nulle ... Je suis sur la clôture quant à ce qui est mieux dans ce cas ... – anthonyv

+0

@anthonyv - tous les points justes. Et oui - il perd une partie de sa brièveté une fois que vous mettez l'enregistrement null. Encore - c'est agréable de voir les gens mettre plusieurs solutions différentes sur la table. –

4

Avez-vous essayé d'utiliser linq?

using System.Collections.Generic; 
using System.Linq; 

namespace Demo 
{ 
    public class Test 
    { 
     public void SortTest() 
     { 
      var myList = new List<Item> { new Item { Name = "Test", Id = 1 }, new Item { Name = "Other", Id = 1 } }; 
      var result = myList.OrderBy(x => x.Name); 
     } 
    } 

    public class Item 
    { 
     public string Name { get; set; } 
     public int Id { get; set; } 
    } 
} 
1

Si vous avez affaire à une liste de ces objets , le plus simple est de fournir une comparaison à la méthode de tri:

var list = new List<MyObject>(); 
... 
list.Sort((item1, item2) => item1.Name.CompareTo(item2.Name)); 

(Ci-dessus l'échantillon ne fait pas de vérification de null sur le nom)

Ceci est agréable et simple parce que la chaîne implémente IComparable<string>. Une alternative serait pour vous de mettre en œuvre IComparable<MyObject> votre classe, et alors vous pouvez appeler list.Sort()

0

La méthode Sort de la classe List<T> a une surcharge qui prend une comparaison personnalisée:

list.Sort((x,y) => x.Name.CompareTo(y.Name)); 
Questions connexes