J'ai un problème LINQ qui m'a un peu perplexe. Je peux voir beaucoup de moyens alternatifs pour trouver une solution, mais je voudrais essayer de résoudre le problème parce qu'il m'embête!Créer IGrouper à partir d'une structure de données déjà groupée
public enum AnimalType {
Cat,
Dog,
Rodent
}
var orderedAnimalTypes = new [] { AnimalType.Rodent, AnimalType.Cat };
J'ai une fonction GetAnimals(AnimalType type)
qui retourne tous les animaux d'un type donné. Je veux prendre orderedAnimalTypes
et rechercher tous les animaux de ce type pour créer une liste ordonnée de groupes. Je veux finir avec un objet de type IEnumerable<IGrouping<AnimalType, Animal>>
. C'est une liste de groupements où le Key
est de type AnimalType
et l'énumération du groupement est de type Animal.
Alors ce que je veux faire est ce (après la projection de la liste orderedAnimalTypes
dans un IEnumerable
des groupes.
foreach (var group in groups) {
AnimalType animalType = group.Key;
IEnumerable<Animal> animals = group.ToArray();
}
Je viens de cant semblent le faire avec tout construit LINQ. Je pense que je peux avoir besoin de faire ma propre mise en œuvre de IGrouping de le faire, mais je ne suis pas sûr.
Alternatives
- je pouvais très faire facilement ce que je veux avec un dictionnaire, mais alors il ne serait pas commandé. Que pourquoi j'essaye d'obtenir un
IEnumerable
des groupements. - Je pourrais aussi utiliser un type anonyme, mais je veux assigner le résultat à un modèle MVC et qui doit être fortement typé. Le type que je veux est
IEnumerable<IGrouping<AnimalType, Animal>>
mais je ne vois pas comment obtenir ce type.
je vais devoir prendre votre parole en ce moment que cela fonctionne ;-) essayant de se rappeler ce que je tentais de groupe il y a 9 mois maintenant! –