【问题标题】:Create IGrouping from an already grouped datastructure从已经分组的数据结构创建 IGrouping
【发布时间】:2010-12-07 13:56:25
【问题描述】:

我遇到了一个 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&lt;IGrouping&lt;AnimalType, Animal&gt;&gt;,但我不知道如何获得该类型。

【问题讨论】:

    标签: linq igrouping


    【解决方案1】:
    orderedAnimalTypes.SelectMany
    (
        animalType => GetAnimals(animalType), 
        (animalType, animal) => new { animalType, animal }
    )
    .
    GroupBy(item => item.animalType, item => item.animal);
    

    【讨论】:

    • 我现在必须相信你的话,这是可行的 ;-) 试图记住我在 9 个月前尝试分组的内容!
    猜你喜欢
    • 2020-02-11
    • 2022-01-18
    • 1970-01-01
    • 1970-01-01
    • 2012-01-27
    • 2019-12-03
    • 2018-03-27
    • 2013-06-07
    • 1970-01-01
    相关资源
    最近更新 更多