我有一个LINQ问题让我有点难过。我可以看到很多其他方法来寻找解决方案,但我想尝试解决这个问题,因为它困扰着我!
public enum AnimalType {
Cat,
Dog,
Rodent
}
var orderedAnimalTypes = new [] { AnimalType.Rodent, AnimalType.Cat };
我有一个函数GetAnimals(AnimalType type)
,它返回给定类型的所有动物。我想取orderedAnimalTypes
并查找该类型的所有动物以创建一个有序的组列表。
我希望最终得到IEnumerable<IGrouping<AnimalType, Animal>>
类型的对象。
这是一个分组列表,Key
的类型为AnimalType
,分组的枚举属于Animal类型。
所以我想要做的就是(在将orderedAnimalTypes
列表投射到IEnumerable
组之后。
foreach (var group in groups) {
AnimalType animalType = group.Key;
IEnumerable<Animal> animals = group.ToArray();
}
我似乎无法使用任何LINQ构造执行此操作。我想我可能需要自己实施IGrouping才能做到,但我不确定。
替代
IEnumerable
分组。 IEnumerable<IGrouping<AnimalType, Animal>>
但是我不知道如何获得该类型答案 0 :(得分:3)
orderedAnimalTypes.SelectMany
(
animalType => GetAnimals(animalType),
(animalType, animal) => new { animalType, animal }
)
.
GroupBy(item => item.animalType, item => item.animal);