使用LINQ转换IEnumerable的集合

时间:2010-09-22 22:22:03

标签: c# linq ienumerable

我有IEnumerableCar个对象

的集合

A Car有财产:年

使用LINQ,我想找到有的地方>同年1辆汽车并返回该列表。

我希望它必须返回一个列表数组,因为如果集合是:

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

我希望2010年的3个列表和2009年的2个列表

这可能吗?

3 个答案:

答案 0 :(得分:4)

您可以使用group by执行此操作。有关更多样本,请参阅hooked on linq

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

现在结果是IEnumerable<IGrouping<int, Car>>,这意味着你可以这样做:

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

答案 1 :(得分:2)

尝试以下

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 :(得分:2)

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> */