2008-11-06 7 views
47

Disons que j'ai un tableau comme celui-ci:Comment ajouter un champ d'index à LINQ résultats

string [] Filelist = ... 

Je veux créer un résultat Linq où chaque entrée a sa position dans le tableau comme celui-ci:

var list = from f in Filelist 
    select new { Index = (something), Filename = f}; 

index à 0 pour le 1er article, 1 pour le 2ème, etc.

Que dois-je utiliser pour l'expression Index =?

Répondre

113

N'utilisez pas d'expression de requête. Utilisez the overload of Select which passes you an index:

var list = FileList.Select((file, index) => new { Index=index, Filename=file }); 
+0

Comment faites-vous cela dans la syntaxe SQL? – toddmo

+0

@toddmo: Par "syntaxe sql", voulez-vous dire "utiliser les expressions de requête LINQ"? Si oui, vous ne pouvez pas. Si vous voulez dire "dans SQL lui-même" alors je ne sais pas - je pense qu'il existe des moyens non portables de le faire. –

+0

Je l'ai compris, merci. Je voulais dire ceci: '(du pilote GHCOPPADriverType à policy.Drivers de GHCOPPADriverHistoryType driverHistory dans driver.Rating_DrivingHistory select (pilote: pilote, histoire: driverHistory)) .Choisir ((t, i) => new DriverHistoryModel (t .history) {DriverId = t.driver.Id, Séquence = i + 1}); '. J'ai donc dû sortir des expressions de requête pour utiliser la surcharge 'Select'. – toddmo

0
string[] values = { "a", "b", "c" }; 
int i = 0; 
var t = (from v in values 
select new { Index = i++, Value = v}).ToList(); 
+2

Pourquoi aller à tous ces problèmes au lieu d'utiliser la version fournie par le framework? –

+13

Veuillez ne jamais faire de mutations dans les requêtes linq .... – yfeldblum

+1

Pourquoi pas !? Ça marche. Vous avez un contrôle total de cette façon. Je ne ferais probablement pas cela moi-même, mais c'est la question qui a été posée. – GeekyMonkey

Questions connexes