我有一个 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>>
但我看不出如何获得这种类型。 最佳答案
orderedAnimalTypes.SelectMany
(
animalType => GetAnimals(animalType),
(animalType, animal) => new { animalType, animal }
)
.
GroupBy(item => item.animalType, item => item.animal);
关于linq - 从已经分组的数据结构创建 IGrouping,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1581525/