我有IEnumerable
个Car
个对象
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个列表
这可能吗?
答案 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> */