从已分组的数据结构创建IGrouping

时间:2009-10-17 05:54:04

标签: linq igrouping

我有一个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分组。
  • 我也可以使用匿名类型,但我想将结果分配给MVC模型并且需要强类型..我想要的类型是IEnumerable<IGrouping<AnimalType, Animal>>但是我不知道如何获得该类型

1 个答案:

答案 0 :(得分:3)

orderedAnimalTypes.SelectMany
(
    animalType => GetAnimals(animalType), 
    (animalType, animal) => new { animalType, animal }
)
.
GroupBy(item => item.animalType, item => item.animal);