Преобразование коллекции IEnumerable с помощью LINQ - PullRequest
4 голосов
/ 23 сентября 2010

У меня есть IEnumerable коллекция Car объектов

Автомобиль имеет свойство: Год

Используя LINQ, я хочу найти, где есть> 1 машина с таким жегод и вернуть этот список.

Я бы ожидал, что он должен будет возвращать массив списков, потому что, если коллекция:список 2 за 2009 год

возможно ли это?

Ответы [ 3 ]

4 голосов
/ 23 сентября 2010

Вы можете сделать это с группой по. См. , подключенный к 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
    }
}
2 голосов
/ 23 сентября 2010
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 голосов
/ 23 сентября 2010

Попробуйте следующее

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();
...