I have the following class:
public class Vehicle
{
public string Make { get; set; }
public DateTime DateManufactured { get; set; }
}
I then made a list of vehicles like:
var dateTime1 = DateTime.Now.AddDays(-7);
var dateTime2 = DateTime.Now.AddDays(-8);
var dateTime3 = DateTime.Now.AddDays(-9);
var vehicles = new List<Vehicle>
{
new Vehicle {Make = "Ferrari", DateManufactured = dateTime1},
new Vehicle {Make = "Mazda", DateManufactured = dateTime2},
new Vehicle {Make = "Dodge", DateManufactured = dateTime3},
new Vehicle {Make = "Holden", DateManufactured = dateTime1},
new Vehicle {Make = "Chrysler", DateManufactured = dateTime2},
new Vehicle {Make = "Mazda", DateManufactured = dateTime3},
};
Next I was trying to get a list of DatesManufactured and for each date the vehicles that were manufactured on that date.
So I went for:
var vehiclesGroupedByDate = vechicles.GroupBy(x => x.DateManufactured)
.Select(x => new
{
x.First().DateManufactured,
Vehicles = x.ToList()
});
This works fines but I'm not sure about the x.First()
part. It works but it doesn't feel quite right. Does anybody know of a more elegant way to code this?
When you use GroupBy
, it will create an IGrouping<TKey, TItem>
, so you can simply do the following:
var vehiclesGroupedByDate = vechicles.GroupBy(x => x.DateManufactured)
.Select(x => new
{
x.Key,
Vehicles = x.ToList()
});
I don't see anything wrong with your code, but you can also use x.Key
instead of x.First().DateManufactured
which wouldn't require a creation of an another IEnumerable.
GroupBy exposes a Key property:
var vehiclesGroupedByDate = vechicles.GroupBy(x => x.DateManufactured)
.Select(x => new
{
x.Key,
Vehicles = x.ToList()
});
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With