2017-05-15 3 views
0

Ich habe eine Ergänzung zu einer ähnlichen Frage, die ich zuvor gefragt habe. Ich habe eine Liste von Fahrzeugtyp wie folgt aufgebaut:linq Abfrage mit Gruppierung und bedingten Ergebnis

class Car 
    { 
     public string Make { get; set; } 
     public string Model { get; set; } 
     public string SecondHand { get; set; } 
     public int AccidentCount { get; set; } 
     public int MaintenanceCount { get; set; } 
    } 

List<Car> cars = new List<Car>() 
{ 
new Car(){Make = "Mercedes", Model = "E-200", SecondHand ="N", AccidentCount = 1 ,MaintenanceCount = 0}, 
new Car(){Make = "Mercedes", Model = "E-200", SecondHand ="N", AccidentCount = 1 ,MaintenanceCount = 1}, 
new Car(){Make = "Mercedes", Model = "E-200", SecondHand ="Y", AccidentCount = 1 ,MaintenanceCount = 1}, 
new Car(){Make = "Mercedes", Model = "E-180", SecondHand ="N", AccidentCount = 0 ,MaintenanceCount = 1}, 
new Car(){Make = "Mercedes", Model = "E-180", SecondHand ="N", AccidentCount = 1 ,MaintenanceCount = 1} 
}; 

Was ich in der Ausgabe der Abfrage benötigen, ist 2 Spalten für Marke und Modell, indem sie die Gruppierung, erhalten Summe von AccidentCount und MaintenanceCount in zwei Spalten und schließlich, wenn es irgendein "SecondHand" -Wert "Y" für einen gegebenen Modellausgang "Y", andernfalls "N".

Ausgang für oben sollte sein:

 
Make  Model AccidentCount MaintenanceCount SecondHand 
Mercedes E-200 3    2    Y 
Mercedes E-180 1    2    N 

Antwort

0

Was ich in der Ausgabe der Abfrage benötigen, ist 2 Spalten für Marke und Modell, indem sie die Gruppierung,

cars.GroupBy(c=> new {c.Make,c.Model}) 

get sum von AccidentCount und MaintenanceCount in 2 Spalten

AccidentCount = g.Sum(c=>c.AccidentCount), 
MaintenanceCount = g.Sum(c=>c.MaintenanceCount) 

und schließlich, wenn es irgendeinen „Second“ Wert „Y“ für ein gegebenes Modell Ausgang „Y“ sonst „N“.

SecondHand = g.Any(c=> c.SecondHand=="Y") ? "Y" : "N" 

Die letzte Abfrage sieht wie folgt aus:

cars.GroupBy(c=> new {c.Make,c.Model}) 
     .Select(g=> new Car { 
       Make = g.Key.Make, 
       Model = g.Key.Model, 
       AccidentCount = g.Sum(c=>c.AccidentCount), 
       MaintenanceCount = g.Sum(c=>c.MaintenanceCount), 
       SecondHand = g.Any(c=> c.SecondHand=="Y") ? "Y" : "N" 
       }); 
+0

Danke, das das Ergebnis gab ich suche. –

Verwandte Themen