Convert IEnumerable Collection Using LINQ

I have an IEnumerable collection of Car objects

A Car has the property: Year

Using LINQ, I want to find where there are> 1 cars with the same year and return this list.

I expect it to have to return an array of lists, because if the collection:

 Car 1: Year 2010 Car 2: Year 2010 Car 3: Year 2009 Car 4: Year 2009 Car 5: Year 2010 Car 6: Year 2008 

I would expect one list out of 3 in 2010 and one list out of 2 for 2009

Is it possible?

+4
source share
3 answers

You can do this with a group. See connected to linq for more samples.

 var result = from car in cars group car by car.year into g where g.Count() > 1 select g 

now the result is IEnumerable<IGrouping<int, Car>> , which means you can do this:

 foreach(var g in result) { int year = g.Key; foreach(var car in g) { // list the cars } } 
+4
source

Try to execute

 List<Car> list = null; IEnumerable<List<Car>> ret = from it in list group it by it.Year into g where g.Count() > 1 select g.ToList(); 
+2
source
 IEnumerable<List<Car>> carsGroupedByYear = cars.GroupBy(c => c.Year) /* Groups the cars by year */ .Where(g => g.Count() > 1) /* Only takes groups with > 1 element */ .Select(g => g.ToList()); /* Selects each group as a List<Car> */ 
+2
source

All Articles