2015-09-13 6 views
0

Pour effectuer un calcul des jours fériés, je dois charger les congés du référentiel pendant un an et pour plusieurs pays et leur état.Dictionnaire en tant que valeur de recherche

Pour obtenir de bonnes performances dans une logique où j'ai besoin de vérifier si une date est vacances ou non, j'essaye de convertir une liste à rechercher en utilisant l'extension .ToLookup avec un dictionnaire comme valeur de celui-ci.

Ce dictionnaire aura State comme une clé et HashSet pour cet état comme valeur. J'essaye de le créer en utilisant Lookup, Dictionary et HashSet, de sorte que je puisse atteindre rapidement les informations de vacances en le filtrant en utilisant le pays et l'état.

Voici le code:

var CountryStateHolidayLookup = holidays.ToLookup(x => x.Country, 
      x => (
     new Dictionary<int, HashSet<Holiday>>() 
       { { x.State, 
        new HashSet<Holiday>() 
        { new Holiday(
         x.HolidayDate.Date, x.IsWeekend) 
        } 
       } } 
     ) 
     ); 

dans la sortie du code ci-dessus je reçois une recherche avec le code pays, la valeur de cette recherche vient un dénombrable de dictionnaire avec chaque jour férié comme un nouveau dictionnaire.

alors que je me attendais un dictionnaire avec tout élément comme un HashSet

Je sais que je fais quelque chose de mal ici, quels sont les changements que je dois faire?

Répondre

1

Je pense que vous l'avez en arrière. Une recherche peut être considérée comme un dictionnaire à plusieurs valeurs. Vous voulez que le pays saisisse la recherche d'états.

Vous voulez probablement quelque chose comme ceci:

var CountryStateHolidayLookup = holidays.GroupBy(h => h.Country) 
    .ToDictionary(
     g => g.Key, 
     g => g.ToLookup(
      h => h.State, 
      h => new Holiday(h.HolidayDate.Date, h.IsWeekend) 
     ) 
    );