2008-11-06 1 views
47

Lets sagen, dass ich ein Array wie diese:Wie Sie ein Indexfeld zu Linq hinzufügen Ergebnisse

string [] Filelist = ... 

Ich mag ein Linq Ergebnis schaffen, wo jeder Eintrag seine Position in dem Array wie folgt hat:

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

Index 0 für den 1. Artikel sein, 1 für das zweite usw.

Was soll ich für den Ausdruck Index verwenden =?

Antwort

113

Verwenden Sie keinen Abfrageausdruck. Verwenden Sie the overload of Select which passes you an index:

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

Wie tun Sie dies in SQL-Syntax? – toddmo

+0

@toddmo: Mit "in SQL Syntax" meinst du "LINQ Abfrage Ausdrücke verwenden"? Wenn ja, können Sie nicht. Wenn Sie "in SQL selbst" meinen, dann weiß ich nicht - ich vermute, dass es nicht-portable Möglichkeiten gibt, es zu tun. –

+0

Ich habe es herausgefunden, danke. Ich bedeutete dies: '(von GHCOPPADriverType Treiber in policy.Drivers von GHCOPPADriverHistoryType driverHistory in driver.Rating_DrivingHistory wählen (Fahrer: Fahrer, Geschichte: driverHistory)) .Select ((t, i) => new DriverHistoryModel (t .history) {DriverId = t.driver.Id, Sequenz = i + 1}); '. Also musste ich aus den Abfrageausdrücken herauskommen, um die "Select" -Überladung zu verwenden. – toddmo

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

Warum sollten Sie sich die Mühe machen, anstatt die Version zu verwenden, die vom Framework bereitgestellt wird? –

+13

Bitte tun Sie nie Mutationen in linq Abfragen .... – yfeldblum

+1

Warum nicht !? Es klappt. Auf diese Weise haben Sie die volle Kontrolle. Ich würde das wahrscheinlich nicht selbst machen, aber das ist die Frage, die gestellt wurde. – GeekyMonkey