5

LINQの問題が発生したため、少し困惑しました。私は解決策を見つけるための多くの代替方法を見ることができますが、問題を解決しようと思っています。

public enum AnimalType {
    Cat,
    Dog,
    Rodent
}

var orderedAnimalTypes = new [] { AnimalType.Rodent, AnimalType.Cat };

GetAnimals(AnimalType type)特定の種類のすべての動物を返す関数があります。orderedAnimalTypesそのタイプのすべての動物を調べて検索し、グループの順序付きリストを作成したいと思います。

タイプのオブジェクトになりたいですIEnumerable<IGrouping<AnimalType, Animal>>。これは、KeyがタイプAnimalTypeであり、グループの列挙がタイプが動物であるグループのリストです。

だから私がやりたいのはこれです(orderedAnimalTypesリストをIEnumerableグループのグループに投影した後)。

foreach (var group in groups) {
    AnimalType animalType = group.Key;
    IEnumerable<Animal> animals = group.ToArray();
}

LINQコンストラクトではこれを実行できないようです。それを行うには、IGroupingの独自の実装を作成する必要があるかもしれないと思っていますが、よくわかりません。

代替案

  • 辞書を使えば、やりたいことがとても簡単にできましたが、注文されませんでした。そのため、私はIEnumerableグループ化を取得しようとしています。
  • 匿名型を使用することもできますが、結果をMVCモデルに割り当てたいので、強く型付けする必要があります。必要な型はIEnumerable<IGrouping<AnimalType, Animal>>、その型を取得する方法がわかりません。
4

1 に答える 1

5
orderedAnimalTypes.SelectMany
(
    animalType => GetAnimals(animalType), 
    (animalType, animal) => new { animalType, animal }
)
.
GroupBy(item => item.animalType, item => item.animal);
于 2010-07-13T10:40:56.180 に答える