2015-09-13 5 views
0

Чтобы провести отпуск, мне нужно загрузить праздничные дни из хранилища в течение года и для нескольких стран и их состояния.Словарь как значение для поиска

Чтобы получить хорошую производительность в логике, где мне нужно проверить, является ли дата праздником или нет, я пытаюсь преобразовать список в поиск, используя расширение .ToLookup со словарем в качестве значения.

Этот словарь будет иметь состояние как ключ и HashSet для этого состояния в качестве значения.

Я пытаюсь создать его с помощью Lookup, Dictionary и HashSet, чтобы я мог быстро добраться до информации о праздниках, фильтруя его с помощью страны и штата.

Ниже приведен код:

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) 
        } 
       } } 
     ) 
     ); 

на выходе выше коды я получаю Lookup с кодом страны, значение этого поиска приходит Перечислимый словарь с каждым праздником в качестве нового словаря.

, тогда как я ожидал словарь со всем пунктом как один HashSet

Я знаю, что я делаю что-то здесь не так, Какие изменения я должен сделать?

ответ

1

Я думаю, что у вас есть это в обратном направлении. Поиск можно рассматривать как многозначный словарь. Вы хотите, чтобы ключ страны к поиску состояний.

Вы, вероятно, хотите что-то вроде этого:

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) 
     ) 
    );