2010-12-17 15 views
0

Ich habe die folgende Klasse:Abrufen der Werte aus einer gruppierten Zeile LINQ mit

public class MySeat 
{ 
    public string Section { get; set; } 
    public string Row { get; set; } 
    public string Seat {get; set; } 
} 

ich zu einer Gruppe so eine Liste der Sitze von der Sektion und Row wollen, dass ich ein Komma getrennte Liste der Sitze machen .

var groupedSeats = seats.GroupBy(x => new { x.Section, x.Row }); 
foreach (var group in groupedSeats) 
{ 
    htmlWriter.Write(group.Key.Section); 
    List<string> seatNumbers = new List<string>(); 
    foreach (var seat in group) 
    seatNumbers.Add(seat.Seat); 

    htmlWriter.Write(string.Join(@", ", seatNumbers.ToArray())); 
} 

Gibt es einen besseren Weg, dies mit LINQ zu tun?

Dies ist nur ein kleiner Teil des Codes, den ich versuche aufzuräumen, ich bin neugierig, ob es eine bessere Möglichkeit gibt, die Sitznummern für die Anzeige zu nehmen, anstatt eine Liste zu erstellen, die Gruppen zu durchlaufen und dann macht eine string.Join darauf.

Antwort

1

Sie versuchen

group.Select(s => s.Seat).ToArray() 
+0

Bah, Ich sauge. Ich dachte, ich habe es ausprobiert und es hat den Objekttyp String ausgedruckt und nicht die tatsächlichen Platznummern. Danke, ich werde in 8 Minuten akzeptieren. – Brandon

2

Hier ist eine Abfrage zu schreiben, die alle Fäden direkt wird aufbauen, das „Daten-Konstrukt“ aus dem „Verarbeitungs Konstrukt“ Trennung:

var data = from grp in seats.GroupBy(x => new { x.Section, x.Row }) 
      let groupSeats = grp.Select(s => s.Seat).ToArray() 
      select new { 
       grp.Key.Section, 
       SeatNumbers = String.Join(@", ", groupSeats); 

foreach (var d in data) 
{ 
    htmlWriter.Write(d.Section); 
    htmlWriter.Write(d.SeatNumbers); 
} 
Verwandte Themen