web-dev-qa-db-fra.com

LINQ Group By dans un objet Dictionary

J'essaie d'utiliser LINQ pour créer un Dictionary<string, List<CustomObject>> À partir d'un List<CustomObject>. Je peux obtenir que cela fonctionne 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 aussi essayé d'utiliser Cast<>() de la bibliothèque LINQ une fois que j'ai x, mais je rencontre des problèmes de compilation qui font qu'il s'agit d'une distribution non valide.

144
Atari2600
Dictionary<string, List<CustomObject>> myDictionary = ListOfCustomObjects
    .GroupBy(o => o.PropertyName)
    .ToDictionary(g => g.Key, g => g.ToList());
313
Yuriy Faktorovich

Je ne peux pas commenter sur @ Michael Blackburn, mais je suppose que vous avez eu le vote négatif, car GroupBy n'est pas nécessaire dans ce cas.

Utilisez-le comme:

var lookupOfCustomObjects = listOfCustomObjects.ToLookup(o=>o.PropertyName);
var listWithAllCustomObjectsWithPropertyName = lookupOfCustomObjects[propertyName]

De plus, j'ai constaté que cela fonctionnait bien mieux qu'avec GroupBy (). ToDictionary ().

17
RuudvK