2010-07-19 15 views
6

Ich habe 101 LINQ Samples verwendet, um meine Füße mit LINQ nass zu bekommen. Es war eine gute erste Ressource, aber ich kann dort kein Beispiel sehen, was ich gerade brauche.Gruppennummer in einer LINQ-Gruppe nach Abfrage

Ich muss nur eine sequentielle Gruppennummer mit jeder Gruppe verknüpfen. Ich habe eine Arbeitslösung:

var groups = 
    from c in list 
    group c by c.Name into details 
    select new { Name = details.Key, DetailRecords = details }; 


int groupNumber = 0; 
foreach (var group in groups) 
{ 
    // 
    // process each group and it's records ... 
    // 

    groupNumber++; 
} 

Aber ich bin sicher, es ist möglich, LINQ zu verwenden, um auch die Group zu erzeugen. Wie?

Antwort

9

Diese auf Ihre genauen Bedürfnisse ab, aber Sie verwenden können:

var groupArray = groups.ToArray(); 

Ebenso können Sie ToList verwenden. Diese Datenstrukturen sind sequentiell und jede Gruppe hat einen Index.


Wenn Sie den Index tun müssen, auf dem Objekt, das Sie erstellen, ist eine weitere Option Select zu verwenden:

list.GroupBy(c => c.Name) 
    .Select((details, ind) => 
    new 
    { 
     Name = details.Key, 
     DetailRecords = details, 
     Index = ind 
    }); 
+0

heh, schlau. Ich mag das. –

+0

+1 ... clever =) – Luiscencio

+0

Hier gibt es zwei Antworten. Ich mag die ToList-Lösung, aber die Auswahl von zwei Parametern war genau das, wonach ich suchte. Danke vielmals. –

6

dies sollte es tun:

int groupNumber = 0; 
var groups = 
    from c in list 
    group c by c.Name into details 
    select new { Name = details.Key, DetailRecords = details, grpNum = groupNumber++}; 
+0

+1 für die Zuordnung der GroupNumber mit dem LINQ-Ergebnis. –

1

wenn es nur eine sequentielle Gruppennummer, benutzen Sie einfach die Count() -Methode auf IEnumerierbar.

var groups = 
    from c in list 
    group c by c.Name into details 
    select new {Name = details.Key, DetailRecords = details}; 

for(int i = 0; i < groups.Count(); i++) 
{ 
    //Process Records 
} 

Dann, wenn Sie die spezifische Gruppennummer benötigen, können Sie nur i greifen.

+0

Wie meine ursprüngliche Lösung, aber sauberer, da das Inkrement nicht im Verarbeitungscode verloren geht. –

Verwandte Themen