2009-07-08 6 views
1

Je voudrais utiliser Linq to XML pour générer une liste triée chaque élément doit contenir une valeur et son index dans cette liste.Génération d'index dans Linq

En d'autres termes, je voudrais faire quelque chose comme ça (substance xml a été rayé out):

var Sample = new[] { "4", "3", "2", "1" }.AsQueryable(); 
var r = (from o in Sample orderby o select new {obj=o, idx=?}); 

Je ne suis pas sûr de savoir comment calculer IDX. Est-ce possible ou dois-je utiliser foreach loop?

Répondre

2

Vous pouvez utiliser une boucle foreach, ou vous pouvez utiliser la surcharge de Sélectionnez avec cette signature:

public static IEnumerable<TResult> Select<TSource, TResult>(
    this IEnumerable<TSource> source, 
    Func<TSource, int, TResult> selector 
) 

Cette version de Select passera l'index de l'élément dans l'énumération de vous.

Vous appelleriez comme ceci:

var Sample = new[] { "4", "3", "2", "1" }; 
var r = Sample.OrderBy(t => t).Select((t, i) => new {obj = t, idx = i}); 
1

Je ne crois pas qu'il est facile d'y parvenir avec la syntaxe de requête. Cependant, si vous utilisez l'approche de requête de style lambda, c'est possible avec la surcharge de select qui passe l'index comme second paramètre.

var r = Sample.OrderBy(x => x).Select((o,i) => new { obj=o, idx=i});