Using the example below, (from the answer in this link here) how can I select/group with an extra column ? I have searched this site and others and tried some examples but couldn’t get it to work.
// Existing working code public class Rates { public string RateClass { get; set; } public decimal CostDay { get; set; } public decimal CostWeek { get; set; } } var rates = new List<Rates> { new Rates {CostDay = 2, CostWeek = 7, RateClass = "Test 1"}, new Rates {CostDay = 4, CostWeek = 17, RateClass = "Test 1"}, new Rates {CostDay = 6, CostWeek = 27, RateClass = "Test 2"}, new Rates {CostDay = 8, CostWeek = 37, RateClass = "Test 2"} }; var data = rates.GroupBy(t => t.RateClass) .Select(g => new Rates { RateClass = g.Key, CostDay = g.Min(x => x.CostDay), CostWeek = g.Sum(x => x.CostWeek) }) .ToList(); // Need to add one extra column to be selected and grouped on public class Rates { public string RateClass { get; set; } ****public string TypeOfVehicle { get; set; }**** public decimal CostDay { get; set; } public decimal CostWeek { get; set; } } var rates = new List<Rates> { new Rates {CostDay = 2, CostWeek = 7, RateClass = "Test 1",TypeOfVehicle = "A"}, new Rates {CostDay = 4, CostWeek = 17, RateClass = "Test 1",TypeOfVehicle = "B"}, new Rates {CostDay = 6, CostWeek = 27, RateClass = "Test 2",TypeOfVehicle = "C"}, new Rates {CostDay = 8, CostWeek = 37, RateClass = "Test 2",TypeOfVehicle = "D"} }; var data = rates.GroupBy(t => t.RateClass) .Select(g => new Rates { RateClass = g.Key, ****TypeOfVehicle = ???**** CostDay = g.Min(x => x.CostDay), CostWeek = g.Sum(x => x.CostWeek) }) .ToList();
Advertisement
Answer
It sounds like what you want would be:
.GroupBy(g => new { g.RateClass, g.TypeOfVehicle })
Then in the .Select()
.Select(g => new Rates { RateClass = g.Key.RateClass, TypeOfVehicle = g.Key.TypeOfVehicle, CostDay = g.Min(x => x.CostDay), CostWeek = g.Sum(x => x.CostWeek) })
This groups on distinct combinations of rate class and vehicle type.