web-dev-qa-db-fra.com

LINQ - Convertir une liste en dictionnaire avec Value en tant que liste

J'ai un

List<MyObject> 

que je récupère de la base de données. Cependant, je voudrais qu'il soit saisi par une propriété dans MyObject à des fins de regroupement. Quelle est la meilleure façon avec LINQ de lancer ma liste pour:

Dictionary<long, List<MyObject>>

J'ai le suivant:

myObjectList.ToDictionary(x => x.KeyedProperty)

Mais ça revient:

Dictionary<long, MyObject>
84
Brandon

Il semble que vous souhaitiez regrouper les instances MyObject par KeyedProperty et mettre ce regroupement dans un fichier Dictionary<long,List<MyObject>>. Si oui, essayez ce qui suit

List<MyObject> list = ...;
var map = list
  .GroupBy(x => x.KeyedProperty)
  .ToDictionary(x => x.Key, x => x.ToList());
157
JaredPar

Vous devriez utiliser la méthode ToLookup extension sur la classe Enumerable class comme suit:

List<MyObject> list = ...;

ILookup<long, MyObject> lookup = list.ToLookup(o => o.KeyedProperty);

Si vous voulez placer cela dans un dictionnaire, vous pouvez utiliser la méthode d'extension ToDictionary , comme ceci:

IDictionary<long, IEnumerable<MyObject>> dictionary = lookup.ToDictionary(
    l => l.Key);
15
casperOne