LINQ Groupe Par un Objet Dictionary
Je suis en train d'utiliser LINQ pour créer un Dictionary<string, List<CustomObject>>
à partir d'un List<CustomObject>
. Je peux obtenir ce travail à l'aide de la "var", mais je ne veux pas utiliser les types anonymes. Voici ce que j'ai
var x = (from CustomObject o in ListOfCustomObjects
group o by o.PropertyName into t
select t.ToList());
J'ai aussi essayé d'utiliser Cast<>()
de LINQ bibliothèque une fois que j'ai x
, mais j'ai des problèmes à la compilation, à l'effet d'être un invalide de fonte.
- Ajouter plus de code, s'il vous plaît.
- Que faire si vous essayez var x = (à partir de CustomObject o dans ListOfCustomObjects groupe o par o.PropertyName en t sélectionnez t).ToList();
- Est-il une raison pourquoi vous avez besoin pour ce faire, plutôt que d'utiliser ToLookup, qui est conçu pour cela?
- Jon, pourriez-vous s'il vous plaît poster un exemple de la façon dont ToLookup œuvres dans cette situation? Je ne suis pas familier avec cette méthode LINQ.
- Vous êtes génial! (Je veux dire, tout le monde savait déjà, mais quand même.) Raison, je n'ai pas l'intention de l'utiliser ToLookup était parce que je n'avais jamais entendu parler jusqu'à maintenant. Maintenant je sais!
- Juste à des fins d'exhaustivité, à l'aide de
var
n'est pas à l'aide d'un "anonyme" de type, c'est à l'aide d'un "implicite" de type. Les types anonymes sont de nouvelles classes créé par le compilateur pour gérer la constructionnew { thing = "stuff" };
. Implicite types de classes existantes,var
est juste un moyen pratique de référence lorsque la variable est attribuée immédiatement, le type de variable peut être déduit du type de l'objet affecté. Vous pouvez même implicitement le type d'une variable fait référence à un type anonyme, c'est à dire:var a = new { thing = "stuff" };
Vous devez vous connecter pour publier un commentaire.
.GroupBy(o => o.PropertyName).ToDictionary(g => g.Key, g => g.ToList())
Ce pourrait être une partie de l'extension Linq bibliothèque. donc on n'a qu'à faire.ToDictionary(o=>o.PropertyName)
ToDictionary
avecToLookup
.Je ne peux pas commenter sur @Michael Blackburn, mais je suppose que vous avez obtenu le downvote parce que le Groupe n'est pas nécessaire dans ce cas.
L'utiliser comme:
En outre, j'ai vu ce effectuer de façon mieux que lors de l'utilisation de GroupBy().ToDictionary().
Pour @atari2600, c'est ce que la réponse pourrait ressembler à l'aide de ToLookup en lambda syntaxe:
Fondamentalement, il faut le IGrouping et se matérialise pour vous dans un dictionnaire de listes, avec les valeurs de PropertyName comme clé.
ToLookup
a une surcharge qui vont faire le travail.