J'essaie d'utiliser LINQ pour créer un fichier à Dictionary<string, List<CustomObject>>
partir d'un fichier List<CustomObject>
. Je peux faire fonctionner cela en utilisant "var", mais je ne veux pas utiliser de 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 également essayé d'utiliser à Cast<>()
partir de la bibliothèque LINQ une fois que je l'ai fait x
, mais j'ai des problèmes de compilation en raison du fait qu'il s'agit d'un cast invalide.
linq
dictionary
Atari2600
la source
la source
var
pas un type "anonyme", il utilise un type "implicite". Les types anonymes sont de nouvelles classes créées par le compilateur pour gérer la constructionnew { thing = "stuff" };
. Les types implicites sont des classes existantes,var
c'est juste un moyen pratique de les référencer lorsque la variable est assignée immédiatement, le type de variable peut être déduit du type de l'objet qui lui est assigné. Vous pouvez même taper implicitement une variable référençant un type anonyme, à savoir:var a = new { thing = "stuff" };
Réponses:
la source
.GroupBy(o => o.PropertyName).ToDictionary(g => g.Key, g => g.ToList())
Cela pourrait faire partie de la bibliothèque d'extension Linq. donc nous n'avons qu'à faire.ToDictionary(o=>o.PropertyName)
ToDictionary
parToLookup
.Je ne peux pas faire de commentaire sur @Michael Blackburn, mais je suppose que vous avez obtenu le vote négatif car le GroupBy n'est pas nécessaire dans ce cas.
Utilisez-le comme:
De plus, j'ai vu cela mieux fonctionner que lors de l'utilisation de GroupBy (). ToDictionary ().
la source
Pour @ atari2600, voici à quoi ressemblerait la réponse en utilisant ToLookup dans la syntaxe lambda:
Fondamentalement, il prend l'IGrouping et le matérialise pour vous dans un dictionnaire de listes, avec les valeurs de PropertyName comme clé.
la source
ToLookup
a une surcharge qui fera le travail.Ce qui suit a fonctionné pour moi.
la source