J'ai l'objet suivant dans une liste:
public class DemoClass
{
public int GroupKey { get; set; }
public string DemoString { get; set; }
public object SomeOtherProperty { get; set; }
}
Maintenant, je veux créer le dictionnaire suivant à partir de celui-ci:
Dictionary<int, List<DemoClass>>
Je veux regrouper le List<DemoClass>
par propriété GroupKey
, mais je ne comprends pas comment cela est fait et un peu d'aide.
Après avoir réfléchi un peu, j'ai obtenu le comportement nécessaire avec:
var groupedDemoClasses = from demoClass in mySepcialVariableWhichIsAListOfDemoClass
group demoClass by demoClass.GroupKey
into groupedDemoClass
select groupedDemoClass;
var neededDictionary = groupedDemoClass.ToDictionary(gdc => gdc.Key, gdc => gdc.ToList());
mais, y a-t-il un moyen d'en faire une seule déclaration?
Vous en avez déjà fait un one-liner. Mettez simplement le
ToDictionary
à la fin de votre première ligne. Si vous souhaitez qu'elle soit plus courte, utilisez la syntaxe de composition fonctionnelle au lieu de la syntaxe de requête.la source
Je vais légèrement hors sujet ici, mais je suis arrivé à ce fil parce que je cherchais un moyen de créer un dictionnaire d'un dictionnaire en Linq, et la conversation ici m'a conduit à la réponse ...
Vous pouvez utiliser linq pour créer des dictionnaires à plusieurs niveaux, ce qui est utile pour les scénarios où vous avez plus d'une clé ou dimension que vous souhaitez rechercher. L'astuce consiste à créer un regroupement puis à le convertir en dictionnaire, comme suit:
La requête résultante peut être utilisée comme suit:
J'espère que cela sera utile à quiconque a besoin de ce type de requête.
la source