Is there a better way to set a property common to a list of items in linq

I have the following class:

public class Vehicle { public string Make { get; set; } public DateTime DateManufactured { get; set; } } 

Then I compiled a list of vehicles, such as:

  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}, }; 

Then I tried to get a list of DatesManufactured and for each date 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, but I'm not sure about the x.First() . This works, but it is not entirely correct. Does anyone know a more elegant way to encode this?

+7
source share
3 answers

When you use GroupBy , it will create IGrouping<TKey, TItem> , so you can just do the following:

 var vehiclesGroupedByDate = vechicles.GroupBy(x => x.DateManufactured) .Select(x => new { x.Key, Vehicles = x.ToList() }); 
+7
source

I don't see anything wrong with your code, but you can also use x.Key instead of x.First().DateManufactured , which does not require the creation of another IEnumerable.

+4
source

GroupBy provides the Key property:

 var vehiclesGroupedByDate = vechicles.GroupBy(x => x.DateManufactured) .Select(x => new { x.Key, Vehicles = x.ToList() }); 
+3
source

All Articles