Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Convert collection of IEnumerable using LINQ

I have a IEnumerable collection of Car objects

A Car has a property: Year

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

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

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 of 3 for 2010 and one list of 2 for 2009

is this possible ?

like image 300
leora Avatar asked Feb 26 '23 04:02

leora


2 Answers

You can do this with group by. See hooked on linq for more samples

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

now result is an IEnumerable<IGrouping<int, Car>>, meaning you can do this:

foreach(var g in result)
{
    int year = g.Key;
    foreach(var car in g)
    {
        // list the cars
    }
}
like image 149
Sander Rijken Avatar answered Mar 12 '23 02:03

Sander Rijken


Try the following

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();
like image 26
JaredPar Avatar answered Mar 12 '23 03:03

JaredPar