2009-06-20 6 views
3

Je viens juste de commencer LINQ à XML et j'ai un document simple avec des documents comme celui-ci:Linq à la question XML Noob - distinct et de l'ordre par des attributs

<record date="6/27/2002" symbol="DG" price="15.00" /> 

Je veux une liste de symboles distincts comme des cordes, dans l'ordre.

Cela me donne une liste non ordonnée de tous les attributs, mais je suis coincé

var query = 
    from e in xml.Elements() 
    select e.Attribute("symbol"); 

Comment cela peut-il être modifié pour me donner ce que je veux?

Répondre

2

je ferais avec cette syntaxe lambda:

var query = xml.Elements() 
       .Select(e => (string)e.Attribute("symbol")) 
       .Distinct() 
       .OrderBy(x=>x); 
7

Que diriez-vous:

var query = (from e in xml.Elements() 
       let symbol = (string)e.Attribute("symbol") 
       where symbol != null 
       orderby symbol 
       select symbol).Distinct(); 
+2

Enumerable.Distinct() ne réordonner pas les objets dans .NET 3.5, mais les docs ne faites aucune promesse à ce sujet dans le futur. Je voudrais d'abord distinguer, puis appliquer l'ordre à l'ensemble distinct. http://msdn.microsoft.com/en-us/library/bb348436.aspx "méthode retourne une séquence non ordonnée" –

+0

Assez juste - bon endroit. En tant que détail d'implémentation, il conserve actuellement l'ordre - mais vous avez raison: la documentation ne le garantit pas. –

+0

Génial, vous rock Marc. – jcollum