2016-07-20 8 views
0

Ich habe eine Reihe von Daten in einem Objekt ReportModel wie folgt gespeichert:C# Wörterbuch von der kartierten Werte

var list = someData.Where(...).Select(l => new CarListingModel 
{ 
     CarId = l.CarId, 
     OwnerId = l.OwnerId, 
     CarColor = l.Color 
}); 
:

public class ReportModel 
{ 
    public List<CarListingModel> CarListings {get; set;} 
} 

public class CarListingModel 
{ 
    public long CarId {get; set;} 
    public long OwnerId {get; set;} 
    public string CarColor {get; set;} 
} 

public class GroupedListingModel 
{ 
    public long OwnerId {get; set;} 
    public int TotalCarCount {get; set;} 
    public string CarColors {get; set;} 
} 

ich eine Reihe von Daten in das CarListingModel Objekt wie folgt ausgewählt haben

Der Code ich verwende einen TotalCarCount zu jedem ownerID wie folgt aussieht entsprechend zu erhalten:

var result = list.GroupBy(p=> p.OwnerId, p=> p.CarId, (key, g) => new GroupedListingModel { 
    OwnerId = key, 
    TotalCarCount = g.Count() 
}).ToList(); 

Stattdessen möchte ich jedoch ein Schlüssel/Wert-Paar ausgeben, bei dem der Wert in einem Objekt mehrere Eigenschaften enthält, z. B. die Anzahl der Autos und eine Liste der Fahrzeugfarben. So etwas wie dies (was natürlich nicht funktioniert):

var result = list.GroupBy(p=> p.OwnerId, p=> p.CarId, p=> p.CarColor (key, g1, g2) => new GroupedListingModel 
{ OwnerId = key, 
    TotalCarCount = g1.Count(), 
    CarColors = string.Join(", ", g2.ToList()); 
}).ToList(); 

Ich habe versucht, das gruppierte Auflistung Modell unterschiedlich, wie dies zu schaffen, aber nicht sicher, ob ich auf dem richtigen Weg bin:

public class GroupedListingModel_2 
{ 
    public long OwnerId {get; set;} 
    public DetailsModel Details {get; set;} 
} 

public class DetailsModel 
{ 
    public int TotalCarCount {get; set;} 
    public string CarColors {get; set;} 
} 

Jetzt denke ich, dass diese Daten besser als ein Wörterbuch strukturiert wären, aber ich bin wieder unsicher, wie man von 'Liste' zu meinem gewünschten Ergebnis kommt.

Antwort

2
var result = list.GroupBy(p => p.OwnerId, (key, g) => new GroupedListingModel 
{ 
    OwnerId = key, 
    TotalCarCount = g.Count(), 
    CarColors = string.Join(", ", g.Select(x => x.CarColor).Distinct().OrderBy(x => x)), 
}).ToList() 

Aber strukturierte Daten halten Sie Ihr Modell ein wenig ändern können:

public class GroupedListingModel 
{ 
    public long OwnerId { get; set; } 
    public int TotalCarCount { get; set; } 
    public IEnumerable<string> CarColors { get; set; } 
} 

Und das GroupBy Ergebnisauswahl:

CarColors = g.Select(x => x.CarColor) 
Verwandte Themen